Submission #1284537

#TimeUsernameProblemLanguageResultExecution timeMemory
1284537kerem즐거운 사진 수집 (JOI13_collecting)C++20
100 / 100
842 ms60948 KiB
#include <bits/stdc++.h> using namespace std; #define int int64_t #define pb push_back #define fr first #define sc second #define all(x) x.begin(),x.end() #define sp << " " << #define N 2000 #define inf (int)1e15 typedef pair<int,int> pii; struct Calc{ int n; vector<int> cnt; vector<int> st; Calc(int nn){ n=nn; cnt.assign(n+1,0); st.assign((1<<(n+1)),-1); st[1]=0;cnt[n]=1; } void add(int x,int node=1,int k=1){ if(node==x+(1<<n)){ st[node]^=1; return; } if(st[node]!=2){ cnt[n-k+1]--; cnt[n-k]+=2; st[node<<1]=st[node]; st[node<<1|1]=st[node]; st[node]=2; } if(x&(1<<(n-k))) add(x,node<<1|1,k+1); else add(x,node<<1,k+1); } void remove(int x){ int node=x+=(1<<n),k=0; st[node]^=1; while(st[node]==st[node^1]){ cnt[k+1]++; cnt[k]-=2; st[node>>1]=st[node]; st[node]=st[node^1]=-1; node>>=1;k++; } } }; void solve(){ int n,q; cin >> n >> q; vector<Calc> a(2,Calc(n)); while(q--){ int t,x; cin >> t >> x; x--; if(a[t].st[x+(1<<n)]==-1) a[t].add(x); else a[t].remove(x); int sum0=0,sum1=0; vector<int> cnt(n+1,0); for(int i=n;i>=0;i--){ sum0+=a[0].cnt[i]; sum1+=a[1].cnt[i]; cnt[i]+=sum0*sum1; if(i) cnt[i-1]-=4*sum0*sum1; sum0*=2;sum1*=2; } int ans=0,sum=0; for(int i=0;i<=n;i++){ sum+=cnt[i];sum/=4; ans+=cnt[i]+sum; } cout << ans << "\n"; } } int32_t main(){ //~ freopen("hopscotch.in","r",stdin); //~ freopen("hopscotch.out","w",stdout); cout << fixed << setprecision(0); ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); int test=1; //~ cin >> test; while(test--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...