제출 #1364026

#제출 시각아이디문제언어결과실행 시간메모리
1364026nathako9nSterilizing Spray (JOI15_sterilizing)C++20
80 / 100
5093 ms5816 KiB
#include <bits/stdc++.h>
#define endl '\n'
#define ll long long
using namespace std;
const int N = 100005;
pair<ll,ll>seg[4*N+10];
ll ar[N+3],n,q,k;
pair<ll,ll>com(pair<ll,ll>a,pair<ll,ll>b){
    return {a.first+b.first,max(a.second,b.second)};
}
void bd(int i,int l,int r){
    if(l==r){
        seg[i]={ar[l],ar[l]};
        return;
    }
    int mid=l+(r-l)/2;
    bd(i*2,l,mid);
    bd(i*2+1,mid+1,r);
    seg[i]=com(seg[i*2],seg[i*2+1]);
}
void up1(int i,int l,int r,int p,ll x){
    if(r<p||l>p)return;
    if(r==l&&l==p){
        seg[i]={x,x};
        return;
    }
    int mid=l+(r-l)/2;
    up1(i*2,l,mid,p,x);
    up1(i*2+1,mid+1,r,p,x);
    seg[i]=com(seg[i*2],seg[i*2+1]);
}
void up2(int i,int l,int r,int ql,int qr){
    if(r<ql||l>qr)return;
    if(l>=ql&&r<=qr){
        if(seg[i].second<=0)return;
    }
    if(l==r){
        int nx=0;
        if(seg[i].first!=0)nx=seg[i].first/k;
        seg[i]={nx,nx};
        return;
    }
    int mid=l+(r-l)/2;
    up2(i*2,l,mid,ql,qr);
    up2(i*2+1,mid+1,r,ql,qr);
    seg[i]=com(seg[i*2],seg[i*2+1]);
}
ll que(int i,int l,int r,int ql,int qr){
    if(r<ql||l>qr)return 0;
    if(l>=ql&&r<=qr)return seg[i].first;
    int mid=l+(r-l)/2;
    return que(i*2,l,mid,ql,qr)+que(i*2+1,mid+1,r,ql,qr);
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>q>>k;
    for(int i=1;i<=n;i++){
        cin>>ar[i];
    }
    bd(1,1,n);
    while(q--){
        int t;cin>>t;
         int a,b;cin>>a>>b;
        if(t==1){
            up1(1,1,n,a,b);
        }
        else if(t==2){
            up2(1,1,n,a,b);
        }
        else{
            cout<<que(1,1,n,a,b)<<endl;
        }
    }
    return 0;
}
/*

5 10 3
1
2
8
1
3
1 2 5
2 3 5
3 2 5
2 1 4
1 3 2
3 3 5
1 2 4
2 1 2
1 1 4
3 1 5


5 6 3
1
2
8
1
3
2 3 5
3 2 5
2 1 4
3 3 5
2 1 2
3 1 5

*/
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…