fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int N = int(1e5) + 5;
  6.  
  7. struct ellip{
  8. int a, b;
  9. ellip(){}
  10. } a[N];
  11.  
  12. int n, m;
  13. int cutA, cutB;
  14.  
  15. struct query{
  16. int k, l, r, v;
  17. query(){}
  18. } ask[N];
  19.  
  20. int prv[N], nxt[N];
  21. bool bad[N];
  22.  
  23. int getPrv(int x){
  24. if (!bad[prv[x]]) return prv[x];
  25. return prv[x] = getPrv(prv[x]);
  26. }
  27.  
  28. int getNxt(int x){
  29. if (!bad[nxt[x]]) return nxt[x];
  30. return nxt[x] = getNxt(nxt[x]);
  31. }
  32.  
  33. void del(int x){
  34. bad[x] = true;
  35. int px = prv[x];
  36. int nx = nxt[x];
  37. prv[x] = getPrv(x);
  38. nxt[x] = getNxt(x);
  39. }
  40.  
  41. int main(){
  42. scanf("%d%d", &n, &m);
  43. for(int i = 1; i <= n; ++i) scanf("%d%d", &a[i].a, &a[i].b);
  44. for(int i = 0; i < n + 4; ++i){
  45. if (i) prv[i] = i - 1;
  46. nxt[i] = i + 1;
  47. }
  48. for(int i = 0; i < m; ++i){
  49. scanf("%d%d%d", &ask[i].k, & ask[i].l, &ask[i].r);
  50. if (ask[i].k <= 4) scanf("%d", &ask[i].v);
  51. }
  52. scanf("%d%d", &cutA, &cutB);
  53. for(int i = 1; i <= n; ++i)
  54. if (a[i].a <= 0 || a[i].a > cutA || a[i].b <= 0 || a[i].b > cutB) del(i);
  55. for(int t = 0; t < m; ++t){
  56. int v = ask[t].v;
  57. int l = ask[t].l;
  58. int r = ask[t].r;
  59. if (ask[t].k == 1){
  60. for(int i = getNxt(getPrv(l)); i <= r; i = getNxt(i)){
  61. a[i].a = v;
  62. if (a[i].a <= 0 || a[i].a > cutA) del(i);
  63. }
  64. continue;
  65. }
  66. if (ask[t].k == 2){
  67. for(int i = getNxt(getPrv(l)); i <= r; i = getNxt(i)){
  68. a[i].b = v;
  69. if (a[i].b <= 0 || a[i].b > cutB) del(i);
  70. }
  71. continue;
  72. }
  73. if (ask[t].k == 3){
  74. for(int i = getNxt(getPrv(l)); i <= r; i = getNxt(i)){
  75. a[i].a += v;
  76. if (a[i].a <= 0 || a[i].a > cutA) del(i);
  77. }
  78. continue;
  79. }
  80. if (ask[t].k == 4){
  81. for(int i = getNxt(getPrv(l)); i <= r; i = getNxt(i)){
  82. a[i].b += v;
  83. if (a[i].b <= 0 || a[i].b > cutB) del(i);
  84. }
  85. continue;
  86. }
  87. if (ask[t].k == 5){
  88. long long area = 0LL;
  89. for(int i = getNxt(getPrv(l)); i <= r; i = getNxt(i))
  90. area += 1LL * a[i].a * a[i].b;
  91. printf("%lld\n", area);
  92. continue;
  93. }
  94. if (ask[t].k == 6){
  95. int cnt = 0;
  96. for(int i = getNxt(getPrv(l)); i <= r; i = getNxt(i))
  97. ++cnt;
  98. printf("%d\n", cnt);
  99. }
  100. }
  101. return 0;
  102. }
  103.  
Success #stdin #stdout 0s 6688KB
stdin
1 3
1 1
6 1 1 
3 1 1 1 
6 1 1
1 1
stdout
1
0