QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#419245#8226. 堆操作练习题2cqbzly60 23ms103564kbC++142.5kb2024-05-23 19:30:212024-05-23 19:30:22

Judging History

你现在查看的是最新测评结果

  • [2024-05-23 19:30:22]
  • 评测
  • 测评结果:60
  • 用时:23ms
  • 内存:103564kb
  • [2024-05-23 19:30:21]
  • 提交

answer

#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define rz resize
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
const int N=(1<<19)+5;
const int mod=1e9+7;
int h,m,a[N],b[N],f[N],sz[N],vs[2][N],all,num[N];
set<int>s[N];
vector<int>ps[N];
vector<int>p[N],q[N],r[N];
vector<int>bit[N];
void cl(int x,int rt){
	b[x]=a[x];
	ps[rt].pb(a[x]);
	if(x*2<(1<<h))cl(x*2,rt),cl(x*2+1,rt);
}
void work(int x){
	if(x*2>=(1<<h)||!b[x*2]&&!b[x*2+1]){
		b[x]=0;
		return;
	}
	if(b[x*2]>b[x*2+1]){
		b[x]=b[x*2];
		work(x*2);
	}
	else{
		b[x]=b[x*2+1];
		work(x*2+1);
	}
}
int get(int x){
	if(x*2>=(1<<h)||!b[x*2]&&!b[x*2+1])return x;
	if(b[x*2]>b[x*2+1])return get(x*2);
	return get(x*2+1);
}
int id(int i,int x){
	return lower_bound(ps[i].begin(),ps[i].end(),x)-ps[i].begin();
}
void add(int x,int y,int z){
	for(;y<=sz[x];y+=y&-y)bit[x][y]+=z;
}
int ask(int x,int y){
	int z=0;
	for(;y;y-=y&-y)z+=bit[x][y];
	return z;
}
int main(){
    //freopen("data.in","r",stdin);
    //freopen("swap.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>h;for(int i=1;i<1<<h;i++)cin>>a[i];
    cin>>m;f[0]=1;for(int i=1;i<=1<<h;i++)f[i]=f[i-1]*2%mod;
    for(int i=1;i<1<<h;i++){
    	cl(i,i);
    	sort(ps[i].begin(),ps[i].end());
    	sz[i]=ps[i].size();
    	p[i].rz(sz[i]);
    	q[i].rz(sz[i]);
		r[i].rz(sz[i]);
    	bit[i].rz(sz[i]+1);
    	int tmp=0;
    	while(b[i]){
    		q[i][id(i,b[i])]=tmp;
    		int x=get(i);
    		r[i][id(i,b[i])]=x;
    		tmp++;
    		p[i][id(i,a[x])]=tmp;
			work(i);
		}
	}
	for(int i=1;i<=m;i++){
		int op,x,y;
		cin>>op>>x>>y;
		if(op==1){
			vs[y-1][x]^=1;
			if(y==1){
				for(int j=x;j;j/=2){
					s[j].insert(p[j][id(j,a[x])]);
				}
			}
			else{
				all++;
				for(int j=x;j;j/=2){
					add(j,p[j][id(j,a[x])],1);
					num[j]++;
				}
			}
		}
		else if(op==2){
			vs[y-1][x]^=1;
			if(y==1){
				for(int j=x;j;j/=2){
					s[j].erase(p[j][id(j,a[x])]);
				}
			}
			else{
				all--;
				for(int j=x;j;j/=2){
					add(j,p[j][id(j,a[x])],-1);
					num[j]--;
				}
			}
		}
		else{
			int p=id(x,y);
			//cout<<p<<"\n";
			if(p==sz[x]||ps[x][p]!=y)cout<<0<<"\n";
			else{
				int t=q[x][p],z=r[x][p];
				if(s[x].size()&&*s[x].begin()<=t||!vs[0][z]&&!vs[1][z]){
					cout<<0<<"\n";
				}
				else{
					//cout<<t<<" "<<ask(x,sz[x])-ask(x,t)<<" "<<z<<"\n";
					int cnt=ask(x,sz[x])-ask(x,t)+all-num[x];
					if(vs[1][z])cnt--;
					cout<<f[cnt]<<"\n";
				}
			}
		}	
	}
}

詳細信息

Subtask #1:

score: 10
Accepted

Test #1:

score: 10
Accepted
time: 11ms
memory: 98260kb

input:

2
3 2 1
50
3 3 1
1 1 2
1 2 1
2 2 1
1 2 2
2 1 2
1 1 1
1 3 2
2 1 1
2 2 2
3 1 2
3 1 3
2 3 2
1 3 2
1 2 2
2 2 2
1 2 1
1 1 2
3 1 1
2 1 2
1 1 1
2 1 1
3 1 2
3 1 3
2 3 2
1 3 2
2 2 1
1 2 1
1 1 1
3 1 2
2 1 1
1 1 1
3 3 1
2 1 1
2 3 2
1 3 1
2 3 1
1 1 2
3 1 3
2 1 2
3 3 1
3 1 3
3 1 1
3 1 1
1 3 2
1 1 1
2 1 1
3 1 1
2...

output:

0
1
0
0
0
2
0
1
2
0
1
0
0
0
0

result:

ok 15 numbers

Test #2:

score: 10
Accepted
time: 16ms
memory: 103564kb

input:

2
3 1 2
50
1 2 2
3 3 2
2 2 2
1 3 1
1 1 1
3 3 2
2 1 1
3 1 3
2 3 1
1 3 1
1 1 1
1 2 2
2 1 1
3 1 3
2 3 1
2 2 2
1 1 2
1 2 1
1 3 1
2 1 2
3 3 2
1 1 1
2 3 1
1 3 2
2 3 2
1 3 1
2 2 1
3 3 2
3 1 1
2 3 1
2 1 1
1 3 1
2 3 1
3 1 3
3 1 3
3 1 3
1 1 1
2 1 1
3 1 2
1 2 1
3 1 1
3 3 2
3 1 3
2 2 1
1 1 1
2 1 1
1 2 1
1 1 2
2...

output:

0
1
1
2
1
1
0
0
0
0
0
0
0
0
0

result:

ok 15 numbers

Subtask #2:

score: 10
Accepted

Dependency #1:

100%
Accepted

Test #3:

score: 10
Accepted
time: 7ms
memory: 99172kb

input:

4
15 14 13 9 10 11 12 2 7 4 5 1 6 8 3
500
3 1 15
3 1 13
1 9 1
1 6 2
1 15 2
1 14 1
1 10 2
1 5 2
3 12 1
1 1 1
1 4 1
3 6 6
3 10 4
1 3 1
3 13 6
1 11 2
2 4 1
2 14 1
3 6 6
3 1 11
3 1 14
3 2 4
2 6 2
2 15 2
3 1 9
3 7 12
1 13 2
2 9 1
2 5 2
3 14 8
1 15 2
1 12 1
3 11 5
1 5 2
3 1 15
3 5 10
3 1 11
1 14 1
2 13 2
...

output:

0
0
0
0
8
0
0
8
0
0
0
0
0
8
16
16
0
0
0
32
0
0
32
16
0
0
16
0
0
0
0
4
0
0
0
0
8
0
0
0
0
0
64
64
0
128
0
0
0
128
64
256
0
64
64
0
0
0
8
4
2
0
2
0
0
0
0
8
4
16
0
0
2
0
2
8
0
0
16
0
8
0
0
16
32
0
32
0
4
4
0
4
0
0
0
0
4
0
0
0
2
0
0
0
0
0
4
2
0
0
0
16
8
0
0
0
0
8
2
4
0
4
4
4
16
0
8
8
16
16
0
0
8
0
0
0
0
...

result:

ok 171 numbers

Test #4:

score: 10
Accepted
time: 19ms
memory: 102736kb

input:

4
15 13 14 7 12 8 11 3 4 9 2 5 6 1 10
500
1 2 1
1 14 2
1 4 1
3 1 12
1 15 2
3 1 15
1 9 2
2 4 1
1 13 1
3 7 1
2 13 1
2 15 2
1 7 2
1 13 1
3 15 10
2 2 1
3 2 2
1 2 2
2 2 2
1 15 2
1 11 1
2 9 2
3 3 11
1 1 1
1 12 2
3 10 9
3 4 3
3 7 1
2 7 2
1 4 1
1 5 1
2 15 2
2 12 2
1 10 2
3 2 7
3 2 13
1 3 1
3 1 15
2 1 1
3 14...

output:

1
2
0
0
0
2
0
0
2
0
2
0
2
0
8
4
0
0
8
4
0
4
4
4
1
0
0
4
0
0
8
0
0
0
32
128
0
0
0
16
0
16
0
0
0
0
8
0
0
0
0
0
16
0
32
0
0
0
8
4
0
0
4
0
0
0
0
0
8
8
0
8
0
0
0
8
0
0
16
0
0
0
0
0
0
2
0
2
0
0
2
0
0
2
1
0
0
0
0
8
16
16
0
0
0
0
0
0
0
0
0
0
0
16
0
0
16
32
0
0
16
0
32
0
0
64
0
4
0
8
0
0
0
4
1
0
0
16
4
0
0
0...

result:

ok 148 numbers

Subtask #3:

score: 20
Accepted

Test #5:

score: 20
Accepted
time: 23ms
memory: 100684kb

input:

9
511 509 510 504 507 505 508 501 503 506 502 494 500 499 493 473 483 495 475 491 497 461 487 490 489 498 496 478 485 480 488 378 469 482 477 462 448 422 470 424 467 421 492 439 454 484 451 376 385 458 464 463 486 411 472 449 474 459 468 479 413 457 455 371 315 432 437 466 453 476 418 433 363 434 38...

output:

0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
1
1
0
0
0
0
1
0
0
1
1
1
1
0
1
1
1
1
0
1
1
0
0
0
0
1
0
0
1
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
1
1
0
1
0
0
1
0
0
0
0
1
1
0
0
1
1
1
1
1
0
0
1
1
1
1
1
0
1
0
0
1
1
0
1
0
0
1
0
0
0
0
1
0
1
1
0
1
0
0
1
0
0
1
1
1
0
0
1
1
1
0
0
0
0
1
1
0
1
1
1
1
0
1
0
0
0
1
0
1
1
1
0
0
1
0
0
0
1
1
...

result:

ok 1644 numbers

Test #6:

score: 20
Accepted
time: 15ms
memory: 98396kb

input:

9
511 510 506 509 508 505 504 500 507 501 503 497 498 502 484 454 495 485 494 488 496 493 474 491 460 487 490 486 499 468 467 408 448 451 469 479 478 412 492 482 476 440 466 489 411 462 470 384 407 438 452 430 464 439 481 456 483 449 422 420 446 441 370 372 376 404 443 369 417 405 416 465 444 275 45...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
1
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
1
1
0
0
1
0
1
0
0
1
1
1
1
0
1
0
1
0
0
1
0
1
0
1
1
1
1
0
1
1
0
1
1
0
1
0
0
1
1
1
0
1
1
1
1
1
1
0
0
1
1
1
0
1
0
0
0
1
1
1
1
0
0
1
1
1
0
1
1
1
1
1
0
0
1
1
1
1
1
1
0
1
1
1
1
0
0
1
1
1
1
1
0
0
0
0
1
...

result:

ok 1657 numbers

Test #7:

score: 20
Accepted
time: 17ms
memory: 101884kb

input:

9
511 508 510 502 505 506 509 497 489 501 504 496 500 507 499 494 486 466 482 472 442 503 453 492 469 481 477 488 491 483 484 493 416 480 485 420 465 436 471 353 447 437 384 490 498 399 381 487 468 461 457 478 479 474 473 248 430 412 448 429 421 449 475 423 476 338 410 435 444 438 462 379 415 372 39...

output:

0
0
0
1
0
0
1
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
1
1
0
0
1
1
1
0
0
0
0
0
1
1
0
1
0
1
1
1
0
0
1
0
0
1
0
0
1
1
1
1
0
1
1
0
0
1
0
0
0
1
0
1
1
1
0
0
1
1
0
0
0
0
1
0
0
0
0
1
0
1
1
0
1
1
0
1
0
0
0
1
0
1
1
1
0
1
0
0
1
1
0
1
1
0
1
1
0
0
1
1
1
1
1
0
0
0
1
0
1
1
0
1
0
1
1
1
1
1
0
1
1
1
1
1
0
0
0
0
1
1
1
1
1
0
0
0
...

result:

ok 1644 numbers

Test #8:

score: 20
Accepted
time: 15ms
memory: 101148kb

input:

9
511 509 510 505 506 508 490 499 484 497 501 507 504 477 481 494 469 479 468 458 486 496 487 503 495 498 449 461 467 476 480 448 470 424 459 413 478 441 466 429 446 485 438 489 463 473 483 502 500 491 492 474 493 443 430 385 433 453 447 460 472 379 408 363 415 367 445 401 405 426 259 383 351 322 45...

output:

0
0
0
0
0
0
0
0
0
1
1
0
1
0
0
1
0
1
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
1
0
1
0
0
0
1
0
1
1
1
1
0
0
1
0
0
1
0
0
0
0
1
0
0
0
1
1
0
0
0
1
0
0
1
0
0
1
1
0
0
0
1
0
1
0
1
0
0
0
0
1
1
1
0
0
0
0
1
0
1
0
1
1
0
1
1
1
0
1
0
0
0
1
1
1
1
0
1
1
1
0
1
0
0
0
1
1
1
1
1
1
1
1
0
1
1
...

result:

ok 1620 numbers

Subtask #4:

score: 20
Accepted

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Test #9:

score: 20
Accepted
time: 19ms
memory: 102168kb

input:

9
511 509 510 504 507 508 503 488 502 493 501 505 506 481 483 468 476 495 498 490 487 491 496 447 500 482 499 474 462 453 464 465 461 457 428 448 427 492 472 471 454 484 478 459 489 485 494 393 440 470 497 463 475 477 480 445 473 452 399 436 419 443 396 407 348 409 423 451 397 420 357 435 366 389 33...

output:

0
0
0
128
128
0
512
256
2048
8192
0
0
32768
0
0
524288
524288
0
0
0
0
4194304
0
4194304
0
8388608
0
0
67108864
0
0
0
536870912
0
0
0
0
0
147483634
0
0
589934536
0
589934536
179869065
179869065
0
0
438952513
0
438952513
877905026
0
0
0
511620083
511620083
46480318
23240159
92960636
92960636
0
0
0
371...

result:

ok 1703 numbers

Test #10:

score: 20
Accepted
time: 22ms
memory: 101952kb

input:

9
511 509 510 505 508 506 507 492 503 496 501 498 504 493 502 484 491 480 482 494 489 476 495 469 490 500 483 467 473 464 497 481 423 478 485 326 440 444 436 391 487 474 406 466 472 486 471 373 454 475 477 451 499 479 432 458 460 393 470 433 463 400 462 414 468 410 384 358 363 402 456 271 325 275 42...

output:

0
0
0
0
0
0
256
0
0
0
0
0
131072
16384
0
0
0
524288
524288
0
0
0
16777216
16777216
16777216
0
0
0
147483634
0
0
294967268
294967268
0
438952513
0
0
0
0
0
0
0
0
0
0
511620083
0
0
0
0
92960636
0
0
92960636
0
974740338
974740338
949480669
0
898961331
949480669
0
0
0
383381198
533524785
533524785
0
5363...

result:

ok 1648 numbers

Test #11:

score: 20
Accepted
time: 11ms
memory: 102248kb

input:

9
511 508 510 504 507 501 509 497 503 499 506 487 495 494 505 474 464 493 452 467 498 500 489 460 482 468 490 491 488 496 502 463 465 360 440 459 492 450 445 453 466 483 476 485 448 443 477 402 436 469 480 417 438 426 456 415 442 429 486 470 481 437 449 458 405 409 455 310 357 368 397 420 457 421 47...

output:

0
0
4
0
0
32
0
0
0
1024
0
0
65536
524288
2097152
0
0
0
0
0
0
0
0
0
16777216
0
0
73741817
73741817
536870912
134217728
0
0
0
0
0
0
147483634
294967268
359738130
359738130
0
0
755810045
0
185921272
185921272
0
371842544
0
0
0
743685088
371842544
974740338
0
0
0
743685088
743685088
0
487370169
97474033...

result:

ok 1641 numbers

Test #12:

score: 20
Accepted
time: 21ms
memory: 102020kb

input:

9
511 508 510 499 502 506 509 494 497 495 489 501 504 498 507 490 480 492 496 488 481 485 482 443 484 500 503 475 487 486 505 419 464 453 471 447 472 466 493 436 477 462 431 438 476 456 470 374 433 412 463 430 425 435 483 410 452 417 468 444 451 478 491 403 418 432 460 309 442 465 389 407 421 382 39...

output:

0
0
0
4
0
0
0
0
0
0
1024
2048
0
0
0
0
4096
0
0
0
0
0
0
0
2097152
2097152
0
0
0
0
0
0
147483634
589934536
589934536
0
0
438952513
511620083
371842544
0
0
0
743685088
371842544
0
0
743685088
487370169
743685088
0
0
0
0
487370169
743685088
974740338
0
0
0
0
974740338
0
0
898961331
797922655
0
797922655...

result:

ok 1656 numbers

Subtask #5:

score: 0
Time Limit Exceeded

Dependency #3:

100%
Accepted

Test #13:

score: 0
Time Limit Exceeded

input:

18
262143 262142 262141 262135 262134 262140 262137 262119 262122 262133 262117 262136 262139 262129 262130 262114 262088 262099 262080 262126 262131 262091 262101 262128 262132 262138 262115 262103 262121 262069 262094 262111 262078 261968 262042 262032 262097 262059 262074 262086 262113 262124 262...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
...

result:


Subtask #6:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Dependency #4:

100%
Accepted

Dependency #5:

0%