LuoguP4396 [AHOI2013]作业

题面


分析

看到求出现次数不难想到莫队。接下来考虑如何处理\([a,b]\)的问题。设\(cnt[i]\)表示\(i\)出现的次数,那么询问等价于求\(\Sigma^b_{i=a}cnt_i\),显然可以通过维护rmq数据结构完成。第二问同理之。

代码

/*
By Nero Claudius Caeser Augustus Germanicus,
Imeratorum Romanorum.
*/
#include <bits/stdc++.h>

using namespace std;

namespace StandardIO{

	template<typename T>void read(T &x){
		x=0;T f=1;char c=getchar();
		for(; c<'0'||c>'9'; c=getchar()) if(c=='-') f=-1;
		for(; c>='0'&&c<='9'; c=getchar()) x=x*10+c-'0';
		x*=f;
	}

	template<typename T>void write(T x){
		if(x<0) putchar('-'),x*=-1;
		if(x>=10) write(x/10);
		putchar(x%10+'0');
	}

} using namespace StandardIO;

namespace Project{
	
	const int N=100000+100;
	
	int n,m,block;
	int a[N];
	struct node{
		int l,r,a,b,id;
	} ask[N];
	int l,r,res,cnt[N][2],c[N],ans[N][2];
	
	inline bool cmp(const node x,const node y){
		return (x.l/block!=y.l/block)?(x.l/block<y.l/block):(((x.l/block)&1)?x.r<y.r:x.r>y.r);
	}
#define lowbit(x) x&(-x)
	void update(int x,int v,int t){
		for(; x<=n; x+=lowbit(x)) cnt[x][t]+=v;
	}
	int query(int x,int t){
		int res=0;
		for(; x; x-=lowbit(x)) res+=cnt[x][t];
		return res;
	}
	void add(int x){
		x=a[x],++c[x];
		update(x,1,0);
		if(c[x]==1) update(x,1,1);
	}
	void del(int x){
		x=a[x],--c[x];
		update(x,-1,0);
		if(c[x]==0) update(x,-1,1);
	}

	void MAIN(){
		read(n),read(m),block=sqrt(n);
		for(int i=1; i<=n; ++i){
			read(a[i]);
		}
		for(int i=1; i<=m; ++i){
			read(ask[i].l),read(ask[i].r),read(ask[i].a),read(ask[i].b),ask[i].id=i;
		}
		sort(ask+1,ask+m+1,cmp);
		l=1,r=0;
		for(int i=1; i<=m; ++i){
			while(l>ask[i].l) add(--l);
			while(r<ask[i].r) add(++r);
			while(l<ask[i].l) del(l++);
			while(r>ask[i].r) del(r--);
			ans[ask[i].id][0]=query(ask[i].b,0)-query(ask[i].a-1,0);
			ans[ask[i].id][1]=query(ask[i].b,1)-query(ask[i].a-1,1);
		}
		for(int i=1; i<=m; ++i){
			write(ans[i][0]),putchar(' '),write(ans[i][1]),puts("");
		}
	}
	
}

int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	Project::MAIN();
}

posted @ 2020-07-18 00:14  Ilverene  阅读(390)  评论(0编辑  收藏  举报