Submission #88646

#TimeUsernameProblemLanguageResultExecution timeMemory
88646Bodo171Simple game (IZhO17_game)C++14
100 / 100
218 ms22684 KiB
#include <iostream>
#include <fstream>
using namespace std;
const int lim=1000*1000;
const int nmax=lim+5;
int aib[nmax],a[nmax];
int n,m,i,j,poz,val,x,tip,vv;
inline int lbit(int x)
{
    return (((x^(x-1))&x));
}
void update(int poz,int val)
{
    for(int idx=poz;idx<=lim;idx+=lbit(idx))
        aib[idx]+=val;
}
int compute(int poz)
{
    int ret=0;
    for(int idx=poz;idx>0;idx-=lbit(idx))
        ret+=aib[idx];
    return ret;
}
void add(int l,int r,int val)
{
    if(l>r) swap(l,r);
    update(l,val);
    update(r+1,-val);
}
int main()
{
    //freopen("data.in","r",stdin);
    ios_base::sync_with_stdio(false);
    cin>>n>>m;
    for(i=1;i<=n;i++)
        cin>>a[i];
    for(i=1;i<n;i++)
        add(a[i],a[i+1],1);
    for(i=1;i<=m;i++)
    {
        cin>>tip;
        if(tip==1)
        {
            cin>>poz>>val;
            for(vv=-1;vv<=1;vv+=2)
            {
                if(poz>1) add(a[poz-1],a[poz],vv);
                if(poz<n) add(a[poz+1],a[poz],vv);
                a[poz]=val;
            }
        }
        else
        {
            cin>>val;
            cout<<compute(val)<<'\n';
        }
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...