제출 #1359414

#제출 시각아이디문제언어결과실행 시간메모리
1359414NewtonabcSimple game (IZhO17_game)C++20
100 / 100
93 ms3972 KiB
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
int fw[N],a[N],p[N],t[N],x[N],y[N];
void upd(int i,int val){for(;i<N;i+=i&-i) fw[i]+=val;}
int qry(int i){int s=0; for(;i;i-=i&-i) s+=fw[i]; return s;}
vector<int> cn;
void f(int &l,int &r){
    int tl=l,tr=r;
    l=lower_bound(cn.begin(),cn.end(),tl)-cn.begin();
    r=lower_bound(cn.begin(),cn.end(),tr)-cn.begin();
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cn.push_back(0);
    int n,m; cin>>n >>m;
    for(int i=1;i<=n;i++) cin>>a[i],cn.push_back(a[i]);
    for(int i=0;i<m;i++){
        cin>>t[i] >>x[i];
        if(t[i]>>1) cn.push_back(x[i]);
        else cin>>y[i],cn.push_back(y[i]);
    }
    sort(cn.begin(),cn.end());
    cn.erase(unique(cn.begin(),cn.end()),cn.end());
    for(int i=1;i<=n;i++){
        int l,r;
        if(i==1) continue;
        l=a[i],r=a[i-1];
        if(l>r) swap(l,r);
        f(l,r);
        upd(l,1),upd(r+1,-1);
    }
    for(int i=0;i<m;i++){
        if(t[i]>>1) cout<<qry(lower_bound(cn.begin(),cn.end(),x[i])-cn.begin()) <<"\n";
        else{
            int l,r;
            if(x[i]!=1){
                l=a[x[i]-1],r=a[x[i]];
                if(l>r) swap(l,r);
                f(l,r);
                upd(l,-1),upd(r+1,1);
            }
            if(x[i]!=n){
                l=a[x[i]],r=a[x[i]+1];
                if(l>r) swap(l,r);
                f(l,r);
                upd(l,-1),upd(r+1,1);
            }
            a[x[i]]=y[i];
            if(x[i]!=1){
                l=a[x[i]-1],r=a[x[i]];
                if(l>r) swap(l,r);
                f(l,r);
                upd(l,1),upd(r+1,-1);
            }
            if(x[i]!=n){
                l=a[x[i]],r=a[x[i]+1];
                if(l>r) swap(l,r);
                f(l,r);
                upd(l,1),upd(r+1,-1);
            }
        }
    }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…