Submission #34005

#TimeUsernameProblemLanguageResultExecution timeMemory
34005ngkan146즐거운 사진 수집 (JOI13_collecting)C++98
100 / 100
2373 ms34784 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = (1<<20) + 5;
int n,q,lgn;
int seg[2][4*N], sum[2][25];
void build(int id,int l,int r){
	if (l == r){
		seg[0][id] = seg[1][id] = 0;
		return;
	}
	build(2*id,l,(l+r)/2);
	build(2*id+1,(l+r)/2+1,r);
	seg[0][id] = seg[1][id] = 0;
}
void upd(int type,int id,int l,int r,int pos,int layer){
	if (r < pos || pos < l) return;
	if (l == r){
		seg[type][id] ^= 1;
		return;
	}
	upd(type, 2*id, l, (l+r)/2, pos, layer+1);
	upd(type, 2*id+1, (l+r)/2+1, r, pos, layer+1);
	sum[type][layer] -= (seg[type][id] != -1);
	
	if (seg[type][2*id] == -1 || seg[type][2*id+1] == -1) 
		seg[type][id] = -1;
	else if (seg[type][2*id] != seg[type][2*id+1])
		seg[type][id] = -1;
	else
		seg[type][id] = seg[type][2*id];
	sum[type][layer] += (seg[type][id] != -1);
	
}
void prep(){
	build(1,1,n);
	for(int i=0;i<=lgn;i++)	sum[0][i] = sum[1][i] = (1<<i);
}
int main(){
	scanf("%d %d",&n,&q);
	lgn = n;
	n = (1<<n);
	prep();
	while(q--){
		int type, pos;
		scanf("%d %d",&type,&pos);
		upd(type,1,1,n,pos,0);
		long long res = 0;
		long long used = 0;
		for(int layer = 0;layer <= lgn; layer++){
			
			res += 1ll * ((1ll<<2*layer) - used);
			used = 4ll * sum[0][layer] * sum[1][layer];
			//cout << sum[0][layer] << ' ' << sum[1][layer] << ' ' << res << endl;
		}
		printf("%lld\n",res);
	}
}

Compilation message (stderr)

collecting.cpp: In function 'int main()':
collecting.cpp:39:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d",&n,&q);
                      ^
collecting.cpp:45:28: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d",&type,&pos);
                            ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...