本地非常AC,评测非常RE,本人非常无语,求大佬一看,谢谢!
  • 板块学术版
  • 楼主WindAndSnow
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/4/17 14:51
  • 上次更新2023/11/5 00:26:30
查看原帖
本地非常AC,评测非常RE,本人非常无语,求大佬一看,谢谢!
498456
WindAndSnow楼主2021/4/17 14:51

大家好,本菜鸡在练一道莫队题时,突然发现了本地AC提交RE的壮观景象,求各位大神帮忙,谢谢!

#include<bits/stdc++.h>
#define N 1000009
#define M 1000009
using namespace std;
typedef long long ll;
ll n,m,k,kuai,x[N],l=1,r,ans=0,cnt[N],ques[N];
struct edge{ll l,r,kuai,id;};
edge es[M];
bool cmp(const edge&a,const edge&b){return a.kuai<b.kuai||(a.kuai==b.kuai&&a.kuai%2?a.r<b.r:a.r>b.r);}
int main(){
//	freopen("P2709_1(1).in","r",stdin);
//	freopen("P2709_1(1).out","w",stdout);
	cin>>n>>m>>k;
	for(ll i=1;i<=n;++i) cin>>x[i];
	kuai=sqrt(2500);
	for(ll i=1;i<=m;++i)
		cin>>es[i].l>>es[i].r,es[es[i].id=i].kuai=(es[i].l/kuai);
	sort(es+1,es+m+1,cmp);
	for(ll i=1;i<=m;++i){
		while(l>es[i].l){--l;ll now=(++cnt[x[l]]);ans+=(2*now-1);}
		while(r<es[i].r){++r;ll now=(++cnt[x[r]]);ans+=(2*now-1);} 
		while(l<es[i].l){ll now=(--cnt[x[l]]);ans-=(2*now+1);l++;}
		while(r>es[i].r){ll now=(--cnt[x[r]]);ans-=(2*now+1);r--;}
		ques[es[i].id]=ans;
	}
	for(ll i=1;i<=m;++i) cout<<ques[i]<<" ";
	return 0;
}
2021/4/17 14:51
加载中...