fork(1) download
  1. //============================================================================
  2. // Author : Maulik Soneji
  3. // Motto : Never Give up
  4. // Institute : DA-IICT,Gandhinagar
  5. // Handle : maulik12
  6. //============================================================================
  7.  
  8. #include<bits/stdc++.h>
  9. #define SIZE 100001
  10. using namespace std;
  11. typedef long long ll;
  12.  
  13. void SI(ll &x)
  14. {
  15. register int c = getchar_unlocked();
  16. x = 0;
  17. for(;(c<48 || c>57);c = getchar_unlocked());
  18.  
  19. for(;c>47 && c<58;c = getchar_unlocked())
  20. x = (x<<1) + (x<<3) + c - 48;
  21. }
  22.  
  23. ll st[4*SIZE+1];
  24. ll lazy[4*SIZE+1];
  25. ll arr[SIZE];
  26.  
  27.  
  28. void update(ll ss,ll se,ll index,ll qs,ll qe)
  29. {
  30. if(lazy[index]!=0)
  31. {
  32. if(ss!=se)
  33. {
  34. lazy[2*index+1]+=1;
  35. lazy[2*index+2]+=1;
  36. }
  37. st[index]+=(se-ss+1)*lazy[index];
  38. lazy[index]=0;
  39. }
  40.  
  41. if(qs>se || qe<ss)
  42. return;
  43. // cout<<ss<<" "<<se<<" "<<qs<<" "<<qe<<endl;
  44. if(ss>=qs && se<=qe)
  45. {
  46. // cout<<ss<<"SSD"<<endl;
  47. st[index]+=(se-ss+1);
  48. if(ss!=se)
  49. {
  50. lazy[2*index+1]+=1;
  51. lazy[2*index+2]+=1;
  52. }
  53. return;
  54. }
  55. ll mid=(ss+se)/2;
  56. update(ss,mid,2*index+1,qs,qe);
  57. update(mid+1,se,2*index+2,qs,qe);
  58. st[index]=st[2*index+1]+st[2*index+2];
  59. }
  60. ll query(ll ss,ll se,ll qs,ll qe,ll index)
  61. {
  62. if(lazy[index]!=0)
  63. {
  64. if(ss!=se)
  65. {
  66. lazy[2*index+1]+=1;
  67. lazy[2*index+2]+=1;
  68. }
  69. st[index]+=(se-ss+1)*lazy[index];
  70. lazy[index]=0;
  71. }
  72. if(ss>qe || se<qs)
  73. return 0;
  74.  
  75. if(ss>=qs && se<=qe)
  76. {
  77. return st[index];
  78. }
  79. ll mid=(ss+se)/2;
  80.  
  81. ll lft=query(ss,mid,qs,qe,2*index+1);
  82. ll rgt=query(mid+1,se,qs,qe,2*index+2);
  83.  
  84. return lft+rgt;
  85. }
  86. int main()
  87. {
  88. ll t;
  89. SI(t);
  90. ll n,m;
  91. for(ll i=1;i<=t;i++)
  92. {
  93. printf("Scenario #%lld:\n",i);
  94. SI(n);
  95. SI(m);
  96. for(int i=0;i<=(4*n);i++)
  97. {
  98. st[i]=0;
  99. lazy[i]=0;
  100. }
  101. char str[50];
  102. ll a,b;
  103. ll ans=0;
  104. while(m--)
  105. {
  106. scanf("%s",str);
  107. SI(a);
  108. SI(b);
  109. a--;
  110. b--;
  111. if(str[0]=='a')
  112. {
  113. ans=query(0,n-1,a,b,0);
  114. printf("%lld\n",ans);
  115. }
  116. else
  117. {
  118. printf("OK\n");
  119. update(0,n-1,0,a,b);
  120. }
  121. }
  122. }
  123. }
  124.  
Success #stdin #stdout 0s 10376KB
stdin
2
4 4
answer 1 4
modification 1 2
modification 2 3
answer 2 2
8 6
modification 2 4
modification 4 8
modification 4 5
answer 8 8 
modification 5 7
answer 4 8
stdout
Scenario #1:
0
OK
OK
2
Scenario #2:
OK
OK
OK
1
OK
11