제출 #1220944

#제출 시각아이디문제언어결과실행 시간메모리
1220944AlgorithmWarriorSimple game (IZhO17_game)C++20
100 / 100
43 ms5188 KiB
#include <bits/stdc++.h>

using namespace std;

int const HMAX=1000005;
int const NMAX=100005;
int n,q;
int v[NMAX];

int ub(int x){
    return x&(-x);
}

struct fenwick_tree{
    int v[HMAX];
    void add(int pos,int val){
        while(pos<HMAX){
            v[pos]+=val;
            pos+=ub(pos);
        }
    }
    int sum(int pos){
        int s=0;
        while(pos){
            s+=v[pos];
            pos-=ub(pos);
        }
        return s;
    }
    void add_range(int l,int r,int val){
        if(l>r)
            swap(l,r);
        add(l,val);
        add(r+1,-val);
    }
}aib;

void read(){
    cin>>n>>q;
    int i;
    for(i=1;i<=n;++i)
        cin>>v[i];
}

void init(){
    int i;
    for(i=1;i<n;++i)
        aib.add_range(v[i],v[i+1],1);
}

void process_queries(){
    while(q--){
        int type;
        cin>>type;
        if(type==1){
            int pos,val;
            cin>>pos>>val;
            if(pos>1){
                aib.add_range(v[pos-1],v[pos],-1);
                aib.add_range(v[pos-1],val,1);
            }
            if(pos<n){
                aib.add_range(v[pos],v[pos+1],-1);
                aib.add_range(val,v[pos+1],1);
            }
            v[pos]=val;
        }
        else{
            int val;
            cin>>val;
            cout<<aib.sum(val)<<'\n';
        }
    }
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    read();
    init();
    process_queries();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...