fork download
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define pb push_back
  4. //#define int ll
  5. using namespace std;
  6. const int inf = 1e9;
  7. const ll mod = 1e9 + 7;
  8. const bool T = 0;
  9. ll binpow(ll x, ll sigma){
  10. if(sigma == 0) return 1;
  11. if(sigma%2) return (binpow(x, sigma-1) * x) % mod;
  12. ll gl = binpow(x, sigma/2);
  13. return (gl * gl) % mod;
  14. }
  15. const int N = 111111;
  16. int t[N];
  17. int tmn[N];
  18. int a[N];
  19. int f[N];
  20. void build(int v, int l, int r){
  21. if(l == r){
  22. if(a[l] < 40) t[v] = f[a[l]];
  23. tmn[v] = a[l];
  24. return;
  25. }
  26. t[v] = t[v * 2] + t[v * 2 + 1];
  27. tmn[v] = min(tmn[v * 2], tmn[v * 2 + 1]);
  28. }
  29. void update(int v, int l, int r, int L, int R, int val){
  30. if(l > R || L > r || tmn[v] >= 40) return;
  31. if(l == r){
  32. a[l]++;
  33. if(a[l] <= 40) t[v] = f[a[l]];
  34. else t[v] = 0;
  35. tmn[v] = a[l];
  36. return;
  37. }
  38. t[v] = t[v * 2] + t[v * 2 + 1];
  39. tmn[v] = min(tmn[v * 2], tmn[v * 2 + 1]);
  40. }
  41. void update2(int v, int l, int r, int pos, int val){
  42. if(l == r){
  43. t[v] = val;
  44. return;
  45. }
  46. int mid = (l + r) / 2;
  47. if(mid >= pos){
  48. update2(v * 2, l, mid, pos, val);
  49. } else {
  50. update2(v * 2 + 1, mid + 1, r, pos, val);
  51. }
  52. t[v] = t[v * 2] = t[v * 2 + 1];
  53. }
  54. int get(int v, int l, int r, int L, int R){
  55. if(L > r || l > R) return 0;
  56. if(L <= l && r <= R){
  57. return t[v];
  58. }
  59. int mid = (l + r) / 2;
  60. return get(v * 2, l, mid, L, R) + get(v * 2 + 1, mid + 1, r, L, R);
  61. }
  62. //C:\Users\zaksy\Desktop\Новая папка
  63. int main(){
  64. // freopen("sum2.in", "r", stdin);
  65. // freopen("sum2.out", "w", stdout);
  66. ios_base:: sync_with_stdio(false);
  67. cin.tie(NULL);
  68. int n, q;
  69. cin >> n >> q;
  70. for (int i = 1; i < n; i++){
  71. int type;
  72. int l, r, val;
  73. cin >> l >> r;
  74. if(type == 1){
  75. update2(1, 1, n, l, r);
  76. }
  77. if(type == 2){
  78. cin >> val;
  79. update(1, 1, n, l, r, val);
  80. }
  81. if(type == 3){
  82. cout << get(1, 1, n, l, r) << "\n";
  83. }
  84. }
  85. return 0;
  86. }
  87.  
Success #stdin #stdout 0s 5284KB
stdin
Standard input is empty
stdout
Standard output is empty