Submission #766119

#TimeUsernameProblemLanguageResultExecution timeMemory
766119bachhoangxuan즐거운 사진 수집 (JOI13_collecting)C++17
100 / 100
1035 ms78596 KiB
#include<bits/stdc++.h>
using namespace std;
#define maxn 25
#define int long long
int n,q,c[2][maxn][(1<<20)+5],num[2][maxn],sum,ans;
void update(int p,int x){
    c[p][0][x]^=1;ans=0;
    for(int i=1;i<=n;i++){
        x>>=1;int pre=c[p][i][x];
        if(c[p][i-1][x<<1|1]==c[p][i-1][x<<1]) c[p][i][x]=c[p][i-1][x<<1];
        else c[p][i][x]=-1;
        if(pre!=-1 && c[p][i][x]==-1) num[p][i]--;
        if(pre==-1 && c[p][i][x]!=-1) num[p][i]++;
        ans+=num[p][i]*num[p^1][i];
    }
}
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);cout.tie(NULL);
    cin >> n >> q;
    for(int i=0;i<=n;i++) sum+=(1LL<<(2*i));
    for(int i=1;i<=n;i++) num[0][i]=num[1][i]=(1LL<<(n-i));
    for(int i=1;i<=q;i++){
        int p,x;cin >> p >> x;x--;
        update(p,x);
        cout << sum-4*ans << '\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...