请求加强数据
查看原帖
请求加强数据
172370
fzj2007楼主2022/6/29 20:58

RT。

所有的数据点都满足 n=mn=m。使得下面这份代码过了。

#include<bits/stdc++.h>
using namespace std;
namespace IO{
	template<typename T>inline bool read(T &x){
		x=0;
		char ch=getchar();
		bool flag=0,ret=0;
		while(ch<'0'||ch>'9') flag=flag||(ch=='-'),ch=getchar();
		while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(),ret=1;
		x=flag?-x:x;
        return ret;
	}
	template<typename T,typename ...Args>inline bool read(T& a,Args& ...args){
	    return read(a)&&read(args...);
	}
	template<typename T>void prt(T x){
		if(x>9) prt(x/10);
		putchar(x%10+'0');
	}
	template<typename T>inline void put(T x){
		if(x<0) putchar('-'),x=-x;
		prt(x);
	}
	template<typename T>inline void put(char ch,T x){
		if(x<0) putchar('-'),x=-x;
		prt(x);
		putchar(ch);
	}
	template<typename T,typename ...Args>inline void put(T a,Args ...args){
	    put(a);
		put(args...);
	}
	template<typename T,typename ...Args>inline void put(const char ch,T a,Args ...args){
	    put(ch,a);
		put(ch,args...);
	}
	inline void put(string s){
		for(int i=0,sz=s.length();i<sz;i++) putchar(s[i]);
	}
	inline void put(const char* s){
		for(int i=0,sz=strlen(s);i<sz;i++) putchar(s[i]);
	}
}
using namespace IO;
#define N 200005
int n,m,b[N],w[N],len,bel[N],ans[N],res,t[N],cnt[N]; 
struct question{
	int l,r,id;
	inline bool operator<(const question &b)const{
		if(bel[l]!=bel[b.l]) return l<b.l;
		if(bel[l]&1) return r<b.r;
		return r>b.r;
	}
}q[N];
inline void add(int x){
	t[cnt[x]]--;
	t[++cnt[x]]++;
	res=max(res,cnt[x]);
}
inline void del(int x){
	t[cnt[x]]--;
	if(res==cnt[x]&&!t[cnt[x]]) res--;
	t[--cnt[x]]++;
}
int main(){
	read(n,m);
	len=sqrt(n);
	for(int i=1;i<=n;i++) bel[i]=(i-1)/len+1;
	for(int i=1;i<=n;i++) read(w[i]),b[i]=w[i];
	for(int i=1;i<=m;i++)
		read(q[i].l,q[i].r),q[i].id=i;
	sort(b+1,b+n+1),sort(q+1,q+m+1);
	int t=unique(b+1,b+n+1)-b-1;
	for(int i=1;i<=n;i++) w[i]=lower_bound(b+1,b+t+1,w[i])-b;
	for(int i=1,l=1,r=0;i<=m;i++){
		int L=q[i].l,R=q[i].r;
		while(l>L) add(w[--l]);
		while(r<R) add(w[++r]);
		while(l<L) del(w[l++]);
		while(r>R) del(w[r--]);
		ans[q[i].id]=res;
	}
	for(int i=1;i<=n/*bug,显然应该是n*/;i++)
		put('\n',-ans[i]);
	return 0;
}

提交记录。

2022/6/29 20:58
加载中...