CF643G Choosing Ads
Link 设 \(k=\lfloor\frac{100}p\rfloor\) ,那么查询就是求 \(\frac 1k\) 绝对众数。 因为只要保证输出包含所有 \(\frac 1k\) 绝对众数,所以线段树维护Moore投票法即可。 #include<cstdio> #include<cctype> const int N=150007; int read(){int x=0,c=getchar();while(isspace(c))c=getchar();while(isdigit(c))(x*=10)+=c&15,c=getchar();return x;} int n,m,p; struct node{int n,a[5],b[5];void out(){printf("%d ",n);for(int i=0;i<n;++i) printf("%d ",a[i]);puts("");}}t[N<<2]; node operator+(node a,node b) { node c=b; for(int i=0,f,j,k,t;i<a.n;++i) { for(f=j=0;j<c.n;++j) if(c.a[j]==a.a[i]) {c.b[j]+=a.b[i];f=1;break;} if(f) continue; if(c.n<p) {c.a[c.n]=a.a[i],c.b