求助一个很奇怪的读入问题
查看原帖
求助一个很奇怪的读入问题
933802
ICU152_lowa_IS8楼主2024/4/12 23:14

大抵是40pts 全TLE,然后本地测了#2

#include<bits/stdc++.h>
using namespace std;
int a[200005];
int b[200005];
int f[200005];
int cnt[200005];
map<int,int>mp;
int ans; 
struct node{
	int id,l,r,ans;
}ask[200005];
int n,m;
bool cmp(node a,node b){
	if(a.l/sqrt(n)==a.r/sqrt(n)){
		if((int)(a.l/sqrt(n))&1)return a.r>b.r;
		return a.r<b.r;
	}
	return a.l<b.l;
}
void add(int t){
	f[cnt[a[t]]++]--;
	f[cnt[a[t]]]++;
	ans=max(ans,cnt[a[t]]);
}
void del(int t){
	if(f[cnt[a[t]]]==1&&cnt[a[t]]==ans)ans--;
	f[cnt[a[t]]--]--;
	f[cnt[a[t]]]++;
}
bool Cmp(node a,node b){
	return a.id<b.id;
}
signed main(){
	ios::sync_with_stdio(false);
//	freopen("2.in","r",stdin);
	cin>>n>>m;
//		cout<<n<<" "<<m<<endl;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[i]=a[i];
	}
	sort(b+1,b+n+1);
	cout<<clock()<<"\n";
	int cnt=0;
	for(int i=1;i<=n;i++){
		if(b[i]!=b[i-1])mp[b[i]]=++cnt;
	}
	for(int i=1;i<=n;i++){
		a[i]=mp[a[i]];
	}
	cout<<clock()<<"\n";
	for(int i=1;i<=m;i++){
		cin>>ask[i].l>>ask[i].r;
		ask[i].id=i;
		cout<<i<<"\n";
	}
//	cout<<clock()<<"\n";
	cout<<"ENDINPUT\n";
	sort(ask+1,ask+m+1,cmp);
	int 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--);
		ask[i].ans=-ans;
	}
	sort(ask+1,ask+m+1,Cmp);
	for(int i=1;i<=m;i++)cout<<ask[i].ans<<endl;
	return 0;
}

然后经测试,读入至第199999个数后卡住,很疑惑是什么原因

2024/4/12 23:14
加载中...