답안 #953677

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
953677 2024-03-26T12:34:08 Z m5588ohammed Sterilizing Spray (JOI15_sterilizing) C++14
15 / 100
44 ms 6380 KB
#include <bits/stdc++.h>
using namespace std;
#define int long long
int Tree[3000000];
int N=(1<<(int)(log2(200000)));
int l,r;
int solve(int l1,int r1,int i){
    if(l1>r||r1<l) return 0;
    if(l1>=l&&r1<=r) return Tree[i];
    return solve(l1,(r1+l1)/2,i*2)+solve(((l1+r1)/2)+1,r1,i*2+1);
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int n,k,q;
    cin>>n>>q>>k;
    int arr[n+1];
    for(int i=0;i<n;i++){
        cin>>arr[i];
        Tree[i+N]=arr[i];
    }
    for(int i=N-1;i>=1;i--) Tree[i]=Tree[i*2]+Tree[i*2+1];
    
    if(n<=3000&&q<=3000){
        while(q--){
            int type;
            cin>>type;
            if(type==1){
                int indx,b;
                cin>>indx>>b;
                arr[indx-1]=b;
            }
            if(type==2){
                int l,r;
                cin>>l>>r;
                for(int i=l-1;i<r;i++){
                    arr[i]=arr[i]/k;
                }
                
            }
            if(type==3){
                int l,r,sum=0;
                cin>>l>>r;
                for(int i=l-1;i<r;i++){
                    sum+=arr[i];    
                }
                cout<<sum<<endl;
            }
            
        }
    }
    
    else if(k==1){
        while(q--){
            int type;
            cin>>type;
            if(type==1){
                int indx,b;
                cin>>indx>>b;
                indx--;
                Tree[indx+N]=arr[indx]=b;
                indx+=N;
                indx/=2;
                while(indx!=0){
                    Tree[indx]=Tree[indx*2]+Tree[indx*2+1];
                    indx/=2;
                }
            }
            if(type==2){
                int l,r;
                cin>>l>>r;
            }
            if(type==3){
                cin>>l>>r;
                l--;
                r--;
                cout<<solve(0,N-1,1)<<"\n";
            }    
        }
    }
 
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2652 KB Output is correct
2 Correct 2 ms 2652 KB Output is correct
3 Correct 1 ms 2652 KB Output is correct
4 Correct 4 ms 2652 KB Output is correct
5 Correct 6 ms 2652 KB Output is correct
6 Correct 6 ms 2652 KB Output is correct
7 Correct 6 ms 2652 KB Output is correct
8 Correct 7 ms 2652 KB Output is correct
9 Correct 6 ms 2652 KB Output is correct
10 Correct 6 ms 2652 KB Output is correct
11 Correct 6 ms 2652 KB Output is correct
12 Correct 6 ms 2904 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 32 ms 3412 KB Output is correct
2 Correct 28 ms 3164 KB Output is correct
3 Correct 25 ms 3384 KB Output is correct
4 Correct 31 ms 3676 KB Output is correct
5 Correct 38 ms 6300 KB Output is correct
6 Correct 44 ms 6228 KB Output is correct
7 Correct 38 ms 6380 KB Output is correct
8 Correct 39 ms 6228 KB Output is correct
9 Correct 35 ms 6100 KB Output is correct
10 Correct 35 ms 6092 KB Output is correct
11 Correct 36 ms 6236 KB Output is correct
12 Correct 35 ms 6192 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 2648 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 2904 KB Output isn't correct
2 Halted 0 ms 0 KB -