Submission #124796

#TimeUsernameProblemLanguageResultExecution timeMemory
124796iqvocucSterilizing Spray (JOI15_sterilizing)C++14
100 / 100
543 ms5732 KiB
#include<bits/stdc++.h>
using namespace std;
int n, q, k;
long long a[100100];
long long st[200200];
void build(int id, int l, int r) {
   if (l == r) {
      st[id] =  a[l];
      return;
   }
   int mid=(l+r)/2;
   build(id*2,l,mid);
   build(id*2+1, mid + 1, r);
   st[id] = st[id*2] + st[id *2 +1 ];
}
void truyvan2(int id, int l, int r, int L, int R) {
   if (st[id] == 0 || k == 1) return;
   if (l == r) {
      st[id] /= k;
      return;
   }
   int mid=(l+r)/2;
 if(L<=mid)  truyvan2(id*2, l, mid, L, R);
  if(R>mid)  truyvan2(id*2+1, mid + 1, r, L, R);
   st[id] = st[id*2] + st[id*2+1];
}
void truyvan1(int id, int l, int r, int L, int R) {
   if (l == r) {
      st[id] = R;
      return;
   }
   int mid=(l+r)/2;
   if (L <= mid) truyvan1(id*2, l, mid, L, R);
   else truyvan1(id*2+1, mid + 1, r, L, R);
   st[id] = st[id*2] + st[id*2+1];
}
long long truyvan3(int id, int l, int r, int u, int v) {
   if (u <= l && r <= v) return st[id];
   long long tong = 0;
   int mid=(l+r)/2;
   if (u <= mid) tong += truyvan3(id*2, l, mid, u, v);
   if (mid < v) tong += truyvan3(id*2+1, mid + 1, r, u, v);
   return tong;
}
int main (){
   cin >> n >> q >> k;
   for (int i = 1; i <= n; ++i) {
      cin >> a[i];
   }
   build(1, 1, n);
   while (q--) {
      int query;
      cin >> query;
      if (query == 1) {
         int x, y;
         cin >> x>> y;
         truyvan1(1, 1, n, x, y);
      } else if (query == 2) {
         int xx, yy;
         cin >> xx >> yy;
         truyvan2(1, 1, n, xx, yy);
      } else {
         int xx, yy;
         cin >> xx >> yy;
         cout << truyvan3(1, 1, n, xx,yy) << endl;
      }
   }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...