我的C++有BUG吗?
查看原帖
我的C++有BUG吗?
383791
Others楼主2021/7/16 11:21

为什么将qwqqwq行的注释去掉,答案就不一样了呢?

#include <bits/stdc++.h>
using namespace std;
const int MAXN=50005;
void write(long long ans,bool bk){if(ans<0)putchar('-'),ans=-ans;if(ans==0){if(!bk)putchar('0');return ;}write(ans/10,true);putchar(ans%10^'0');}
void qr(int &ret){int x=0,f=0;char ch=getchar();while(ch<'0'||ch>'9')f|=ch=='-',ch=getchar();while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();ret=f?-x:x;}
struct node{
	int l,r,id,cl;
}p[MAXN];
bool cmp(node x,node y){
	return x.cl==y.cl?(x.cl&1?x.r<y.r:x.r>y.r):x.l<y.l;
}
int a[MAXN],cnt[MAXN];
long long ans[MAXN];
int main() {
    int n,m,s,k;
	long long tot;
	qr(n);
	qr(m);
	qr(k);
	s=sqrt(n);
	for(int i=1;i<=n;++i){
		qr(a[i]);
	}
	for(int i=1;i<=m;++i){
		qr(p[i].l),qr(p[i].r);
		p[i].cl=(p[i].l+s-1)/s;
		p[i].id=i;
	}
	sort(p+1,p+m+1,cmp);
	int l=1,r=0;
	for(int i=1;i<=m;++i){
//		cout << p[i].l << " " << p[i].r << endl;//qwq
		while(r<p[i].r) tot+=2*cnt[a[++r]]+++1;
		while(r>p[i].r) tot-=2*cnt[a[r--]]---1;
		while(l>p[i].l) tot+=2*cnt[a[--l]]+++1;
		while(l<p[i].l) tot-=2*cnt[a[l++]]---1;
		ans[p[i].id]=tot;
	}
	for(int i=1;i<=m;++i){
		write(ans[i],false);
		putchar('\n');
	}
	return 0;
}
2021/7/16 11:21
加载中...