社区讨论
求助,为何全部RE
P2709【模板】莫队 / 小B的询问参与者 11已保存回复 38
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 38 条
- 当前快照
- 1 份
- 快照标识符
- @mi7wnlrh
- 此快照首次捕获于
- 2025/11/21 04:50 4 个月前
- 此快照最后确认于
- 2025/11/21 06:53 4 个月前
CPP
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#define maxn 500005
using namespace std;
long long a[maxn],m,k,bk[maxn],cnt[maxn],i;
int s,n;
long long sum,ans[maxn];
struct node
{
long long l,r,num;
}q[maxn];
bool cmp(node c,node b)
{
if(bk[c.l]==bk[b.l]&&c.r<=b.r)
return 1;
if(c.l<b.l)
return 1;
return 0;
}
void add(long long pos)
{
cnt[a[pos]]++;
sum+=2*cnt[a[pos]]-1;
//prlong longf("pos:%d sum:%lld\n",pos,sum);
}
void del(long long pos)
{
//if(cnt[a[pos]])
cnt[a[pos]]--;
sum-=2*cnt[a[pos]]+1;
}
int main()
{
long long l,r;
scanf("%d%lld%lld",&n,&m,&k);
for(i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
//printf("i=%lld\n",i);
}
for(i=1;i<=m;i++)
{
scanf("%lld%lld",&q[i].l,&q[i].r),q[i].num=i;
}
s=sqrt(n);
//num=n/s+1;
for(i=1;i<=n;i++)
bk[i]=(i-1)/s+1;
sort(q+1,q+m+1,cmp);
l=1;r=0;
for(i=1;i<=m;i++)
{
while(l<q[i].l)del(l++);
while(l>q[i].l)add(--l);
while(r<q[i].r)add(++r);
while(r>q[i].r)del(r--);
ans[q[i].num]=sum;
}
for(i=1;i<=m;i++)
printf("%lld\n",ans[i]);
}
回复
共 38 条回复,欢迎继续交流。
正在加载回复...