This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
// FUCKED UP FUCKED UP FUCKED UP FUCKED UP FUCKED UP
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O2")
#define F first
#define S second
#define pb push_back
#define SZ(x) (ll)(x.size())
#define all(x) x.begin(),x.end()
#define MP make_pair
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pll;
//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const ll maxn=1e5+10, maxm=1e6+10, lg=10, mod=1e9+7, inf=1e18;
#define lc (v<<1)
#define rc (lc^1)
#define md ((s+t)>>1)
ll n,q,k,sum[maxn<<2];
void spray(ll l,ll r,ll s=0,ll t=n,ll v=1){
if(l>=t || r<=s || sum[v]==0) return;
if(t-s==1) return void(sum[v]/=k);
spray(l,r,s,md,lc), spray(l,r,md,t,rc);
sum[v]=sum[lc]+sum[rc];
}
void goz(ll i,ll x,ll s=0,ll t=n,ll v=1){
if(t-s==1) return void(sum[v]=x);
(i<md ? goz(i,x,s,md,lc):goz(i,x,md,t,rc));
sum[v]=sum[lc]+sum[rc];
}
ll get(ll l,ll r,ll s=0,ll t=n,ll v=1){
if(l>=t || r<=s) return 0;
if(l<=s && r>=t) return sum[v];
return get(l,r,s,md,lc)+get(l,r,md,t,rc);
}
int main(){
ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>q>>k;
for(int i=0,x;i<n;i++) cin>>x, goz(i,x);
while(q--){
ll ty,l,r; cin>>ty>>l>>r;
if(ty==1) goz(--l,r);
if(ty==2 && k>=2) spray(--l,r);
if(ty==3) cout<<get(--l,r)<<'\n';
}
return 0;
}
// a denial a denial a denial a denial a denial a denial
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |