我不理解啊我真的不理解啊
查看原帖
我不理解啊我真的不理解啊
616733
Lysea楼主2024/6/30 20:03
#include<bits/stdc++.h>
#define N 1000005
#define int long long
#define INF 1e18
using namespace std;
struct node{
	int l,r,id;
}e[N];
struct roll{
	int id,tt,ans;
}q[N];
int n,m,cnt,blc,tmp,fnt;
int a[N],b[N],tot[N],bel[N],tt[N],ans[N];
bool cmp(node x,node y){
	if(bel[x.l]!=bel[y.l]) return x.l<y.l;
	return x.r<y.r;
}
void add(int x,int y){
	if(y) q[++fnt]={a[x],tot[a[x]],tmp};
	tot[a[x]]++,tmp=max(tmp,tot[a[x]]);
}
signed main(){
	ios::sync_with_stdio(false);
	cin>>n>>m,blc=sqrt(n);
	for(int i=1;i<=n;i++)
		cin>>a[i],b[i]=a[i],bel[i]=(i-1)/blc+1;
	sort(b+1,b+n+1);
	cnt=unique(b+1,b+n+1)-(b+1);
	for(int i=1;i<=n;i++)
		a[i]=lower_bound(b+1,b+cnt+1,a[i])-b;
	for(int i=1,l,r;i<=m;i++)
		cin>>l>>r,e[i]={l,r,i};
	sort(e+1,e+m+1,cmp);
	int l,r;
	for(int i=1;i<=m;i++){
		l=min(bel[e[i].l]*blc,n)+1;
		if(i==1||bel[e[i].l]!=bel[e[i-1].l]){
			r=l-1,tmp=0;
			for(int j=1;j<=cnt;j++) tot[j]=0;
		}
		if(bel[e[i].l]==bel[e[i].r]){
			int res=0;
			for(int j=e[i].l;j<=e[i].r;j++)
				tt[a[j]]=0;
			for(int j=e[i].l;j<=e[i].r;j++)
				res=max(res,++tt[a[j]]);
			ans[e[i].id]=res;
			continue;
		}
		while(r<e[i].r) add(++r,0);
		while(l>e[i].l) add(--l,1);
		ans[e[i].id]=tmp;
		while(fnt){
			tot[q[fnt].id]=q[fnt].tt;
			tmp=q[fnt].ans,fnt--;
		}
	}
	for(int i=1;i<=m;i++) cout<<-ans[i]<<endl;
	return 0;
}

其中

while(r<e[i].r) add(++r,0);    
while(l>e[i].l) add(--l,1);

为什么不能换位置啊

2024/6/30 20:03
加载中...