(玄关)莫队神秘错误已调过求解析
  • 板块P2709 小B的询问
  • 楼主Zcras
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/17 17:08
  • 上次更新2024/10/17 19:35:03
查看原帖
(玄关)莫队神秘错误已调过求解析
573977
Zcras楼主2024/10/17 17:08

rt,

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,M=1e5+10;
int n,m,k,a[N],cnt[N],len,s,ans[M];
struct node{
	int l,r,rank;
	bool operator<(const node &a)const{
		return (l/len==a.l/len)?(r<a.r):(l/len<a.l/len);
	}
}q[N];
void add(int x){
	s+=(2*cnt[a[x]]+1);
	cnt[a[x]]++;
}
void del(int x){
	s-=(2*cnt[a[x]]-1);
	cnt[a[x]]--;
}
int main(){
	cin>>n>>m>>k;
	len=sqrt(n);
	for(int i=1;i<=n;i++)
		cin>>a[i];
	for(int i=1;i<=m;i++){
		cin>>q[i].l>>q[i].r;
		q[i].rank=i;
	}
	sort(q+1,q+1+m);
	int l,r,cl=0,cr=0;
	for(int i=1;i<=m;i++){
		l=q[i].l,r=q[i].r;
		while(cl<l)del(cl++);
		while(cr<r)add(++cr);
		while(cl>l)add(--cl);
		while(cr>r)del(cr--);
		ans[q[i].rank]=s;
	}
	for(int i=1;i<=m;i++){
		cout<<ans[i]-1<<endl;
	}
	return 0;
}

输出ans时减1就答案正确了,这是为啥?

2024/10/17 17:08
加载中...