0%

P3567 [POI 2014] KUR-快递员(区间内有没有一个数出现次数超过一半)

思路讲解

给一个数列,每次询问一个区间内有没有一个数出现次数超过一半。

AC代码

https://www.luogu.com.cn/record/218724261

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

我超,这个POI的数据还是挺严格的,我的这个主席树codeforces和洛谷模版都过了,就这道题目没有过。

1
2
3
1 1
1
1 1

黑体部分,要放在比较下面,不要放在版本更新的上面,否则可能未版本更新就出去了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 处理静态区间第 k 小问题中,因为权值线段树,x=1
void add(int node,int ver,int p,ll x){
clone(node);
sum[idx]+=x;
// 如果当前遍历到的点是一个版本的根,那么现在的点idx就是目前这个版本的根
if(root[ver]==node){
++Cver;
root[Cver]=idx;
}
if(p==L[node] && p==R[node]){
return;
}
if(p>=L[ls[node]] && p<=R[ls[node]]){
int nals=ls[idx];
ls[idx]=idx+1;
add(nals,ver,p,x);
}else{
int nars=rs[idx];
rs[idx]=idx+1;
add(nars,ver,p,x);
}
}