QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#819394 | #9877. Segment Tree | NKheyuxiang | WA | 25ms | 5956kb | C++14 | 1.4kb | 2024-12-18 15:20:11 | 2024-12-18 15:20:11 |
Judging History
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: 5872kb
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: 25ms
memory: 5956kb
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'