제출 #264862

#제출 시각아이디문제언어결과실행 시간메모리
264862GoolakhSterilizing Spray (JOI15_sterilizing)C++17
100 / 100
298 ms5384 KiB
// 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...