QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#819389#9877. Segment TreeNKheyuxiangWA 26ms5936kbC++141.4kb2024-12-18 15:18:152024-12-18 15:18:19

Judging History

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

  • [2024-12-18 15:18:19]
  • 评测
  • 测评结果:WA
  • 用时:26ms
  • 内存:5936kb
  • [2024-12-18 15:18:15]
  • 提交

answer

#include<bits/stdc++.h>
#define N 530005
using namespace std;
int n,Q,dis[N],c[N];
void build(int q){
	if(q>=(1<<n)){
		dis[q]=c[q];
		return;
	}
	build(q*2);
	build(q*2+1);
	dis[q]=min(c[q],dis[q*2]+dis[q*2+1]);
}
void mdf(int x){
	if(x>(1<<n)){
		dis[x]=c[x];
		x/=2;
	}
	for(;x;x/=2) dis[x]=min(c[x],dis[x*2]+dis[x*2+1]);
}
int flx[21],frx[21],fly[21],fry[21];
int qry(int x,int y){
	int ans=1e9;
	int u=(1<<n)+x,v=(1<<n)+y-1;	
	if(x+1==y) ans=c[u];
	flx[n]=fry[n]=0;
	frx[n]=c[u],fly[n]=c[v];
	for(int i=n-1;i>=0;i--){
		if(u&1){
			flx[i]=min(flx[i+1]+dis[u^1],frx[i+1]+c[u/2]);
			frx[i]=min(frx[i+1],flx[i+1]+dis[u^1]+c[u/2]);
		}
		else{
			flx[i]=min(flx[i+1],frx[i+1]+dis[u^1]+c[u/2]);
			frx[i]=min(frx[i+1]+dis[u^1],flx[i+1]+c[u/2]);
		}
		if(v&1){
			fly[i]=min(fly[i+1]+dis[v^1],fry[i+1]+c[v/2]);
			fry[i]=min(fry[i+1],fly[i-1]+dis[v^1]+c[v/2]);
		}
		else{
			fly[i]=min(fly[i+1],fry[i+1]+dis[v^1]+c[v/2]);
			fry[i]=min(fry[i+1]+dis[v^1],fly[i+1]+c[v/2]);
		}
		if(u!=v&&u/2==v/2) ans=min(ans,frx[i+1]+fly[i+1]);
		u/=2,v/=2;
		if(u==v) ans=min(ans,min(flx[i]+fly[i],frx[i]+fry[i]));
	}
	return ans;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<(1<<(n+1));i++) scanf("%d",&c[i]);
	build(1);
	scanf("%d",&Q);
	for(int i=1;i<=Q;i++){
		int op,x,y;
		scanf("%d%d%d",&op,&x,&y);
		if(op==1) c[x]=y,mdf(x);
		else printf("%d\n",qry(x,y));
	}
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 5920kb

input:

3
7 1 14 3 9 4 8 2 6 5 5 13 8 2 3
10
2 0 1
2 0 4
2 4 6
2 4 8
2 3 5
1 6 30
2 3 5
2 4 6
1 1 10000000
2 0 8

output:

2
1
4
8
17
18
13
15

result:

ok 8 tokens

Test #2:

score: -100
Wrong Answer
time: 26ms
memory: 5936kb

input:

1
7914575 2436426 4979445
199989
1 1 6190629
1 1 1407775
1 1 2804784
1 2 2631932
1 1 3078537
1 3 286918
1 2 3238506
1 3 3361868
1 2 9296263
1 3 4836991
1 3 2177068
1 3 4291757
1 1 594328
1 2 8996221
1 1 5531545
1 3 3575467
1 3 3206504
1 1 8344965
1 3 6045895
2 0 2
1 2 6248153
1 1 5797489
1 1 9766466...

output:

6045895
4403172
187581
2512448
130126
6420140
2615908
6363152
6668726
4380822
8809904
4042733
8566868
7492387
2905234
7617913
7609062
371692
4099069
2539201
7188565
4938742
4517278
1913351
6346997
3327130
1759308
330478
2783848
3409112
2827247
8937580
4704960
5280672
7152753
1622556
2599805
1067405
...

result:

wrong answer 1st words differ - expected: '8344965', found: '6045895'