답안 #31828

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
31828 2017-09-11T03:21:01 Z Dat160601 Sterilizing Spray (JOI15_sterilizing) C++14
80 / 100
5000 ms 12332 KB
#include <bits/stdc++.h>
using namespace std;
int n,q,k,x,y;
long long a[100007],it[400007],mx[400007],lazy[400007];
void init(int p,int l,int r){
    if(l==r){
        it[p]=a[l];
        mx[p]=a[l];
        return;
    }
    int mid=(l+r)/2;
    init(p*2,l,mid);
    init(p*2+1,mid+1,r);
    it[p]=it[p*2]+it[p*2+1];
    mx[p]=max(mx[p*2],mx[p*2+1]);
}
void dolazy(int p,int l,int r){
    if(lazy[p]==0) return;
    if(l!=r){
        lazy[p*2]=1;
        lazy[p*2+1]=1;
    }
    it[p]=0;
    mx[p]=0;
    lazy[p]=0;
}
void upd(int p,int l,int r,int pos,int val){
    dolazy(p,l,r);
    if(l>pos || r<pos) return;
    if(l==pos && l==r){
        it[p]=val;
        mx[p]=val;
        return;
    }
    int mid=(l+r)/2;
    upd(p*2,l,mid,pos,val);
    upd(p*2+1,mid+1,r,pos,val);
    it[p]=it[p*2]+it[p*2+1];
    mx[p]=max(mx[p*2],mx[p*2+1]);
}
void div(int p,int l,int r,int L,int R){
    dolazy(p,l,r);
    if(l>R || r<L || l>r) return;
    if(l>=L && r<=R && mx[p]<k){
        it[p]=0;
        mx[p]=0;
        if(l!=r){
            lazy[p*2]=1;
            lazy[p*2+1]=1;
        }
        return;
    }
    if(l==r){
        it[p]/=k;
        mx[p]/=k;
        return;
    }
    int mid=(l+r)/2;
    div(p*2,l,mid,L,R);
    div(p*2+1,mid+1,r,L,R);
    it[p]=it[p*2]+it[p*2+1];
    mx[p]=max(mx[p*2],mx[p*2+1]);
}
long long get(int p,int l,int r,int L,int R){
    dolazy(p,l,r);
    if(l>R || r<L || l>r) return 0;
    if(l>=L && r<=R){
        //cout<<l<<" "<<r<<" "<<it[p]<<endl;
        return it[p];
    }
    int mid=(l+r)/2;
    return get(p*2,l,mid,L,R)+get(p*2+1,mid+1,r,L,R);
}
int main(){
    ios_base::sync_with_stdio(0);
    cin>>n>>q>>k;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    init(1,1,n);
    int type;
    while(q--){
        cin>>type>>x>>y;
        if(type==1){
            upd(1,1,n,x,y);
        }
        else if(type==2){
            div(1,1,n,x,y);
        }
        else{
            cout<<get(1,1,n,x,y)<<"\n";
        }
    }
}

# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 12332 KB Output is correct
2 Correct 3 ms 12332 KB Output is correct
3 Correct 0 ms 12332 KB Output is correct
4 Correct 6 ms 12332 KB Output is correct
5 Correct 16 ms 12332 KB Output is correct
6 Correct 3 ms 12332 KB Output is correct
7 Correct 3 ms 12332 KB Output is correct
8 Correct 13 ms 12332 KB Output is correct
9 Correct 13 ms 12332 KB Output is correct
10 Correct 6 ms 12332 KB Output is correct
11 Correct 9 ms 12332 KB Output is correct
12 Correct 6 ms 12332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5000 ms 12332 KB Execution timed out
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 99 ms 12332 KB Output is correct
2 Correct 29 ms 12332 KB Output is correct
3 Correct 126 ms 12332 KB Output is correct
4 Correct 219 ms 12332 KB Output is correct
5 Correct 396 ms 12332 KB Output is correct
6 Correct 269 ms 12332 KB Output is correct
7 Execution timed out 5000 ms 12332 KB Execution timed out
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 373 ms 12332 KB Output is correct
2 Correct 343 ms 12332 KB Output is correct
3 Correct 413 ms 12332 KB Output is correct
4 Correct 263 ms 12332 KB Output is correct
5 Correct 523 ms 12332 KB Output is correct
6 Correct 583 ms 12332 KB Output is correct
7 Correct 636 ms 12332 KB Output is correct
8 Correct 669 ms 12332 KB Output is correct
9 Correct 523 ms 12332 KB Output is correct
10 Correct 589 ms 12332 KB Output is correct
11 Correct 306 ms 12332 KB Output is correct
12 Correct 706 ms 12332 KB Output is correct