主席树求卡常
查看原帖
主席树求卡常
524369
netlify楼主2025/1/24 20:08

你说的对,但我偏要用主席树?

#include<bits/stdc++.h>
using namespace std;
const int N=2e6+1;
int n,m,cnt,ls[N*21],rs[N*21],val[N*21],rt[N];
#define mid (l+r>>1) 
void in(int &k,int p,int v,int l=1,int r=N){
	ls[k=++cnt]=ls[p],rs[k]=rs[p],val[k]=val[p]+1;
	if(l==r)return;
	if(v<=mid)in(ls[k],ls[p],v,l,mid);
	else in(rs[k],rs[p],v,mid+1,r);
}
int q(int k,int v,int l=1,int r=N,int res=0){
	if(l==r)return val[k];
	if(v<=mid)res+=q(ls[k],v,l,mid);
	else res+=val[ls[k]]+q(rs[k],v,mid+1,r);
	return res;
}
int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1,t;i<=n;i++)cin>>t,in(rt[i],rt[i-1],t);
	for(int l,r,x;m--;)
		cin>>l>>r>>x,cout<<q(rt[r],x)-q(rt[l-1],x)<<"\n";
	return 0;
}
2025/1/24 20:08
加载中...