0%

CF840D Destiny

思路讲解

那我们还是要确认一下,我们的这个模版啊,问题不是很大,所以我们来用cf的题目测一下。

就改了一下这个query部分,其他都没动。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// u v 为node,l,r为区间,k为区间第k小(实际上来说,表示区间的是u,v。l,r为值域)
int query(int u,int v,int l,int r,int k){
if(l==r){
if(sum[v]-sum[u]>=k) return l;
else return INF;
}
// 我们这样就知道了
int lsum=sum[ls[v]]-sum[ls[u]];
int mid=l+r>>1;
int ans1=INF,ans2=INF;
if(lsum>=k){
ans1=query(ls[u],ls[v],l,mid,k);
}
if(ans1==INF && sum[rs[v]]-sum[rs[u]]>=k){
ans2=query(rs[u],rs[v],mid+1,r,k);
}
// ans1= ans1==0?INF:ans1;ans2= ans2==0?INF:ans2;
return min(ans1,ans2);
}

AC代码

https://codeforces.com/contest/840/submission/321605622

心路历程(WA,TLE,MLE……)