社区讨论

求助,为何全部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 条回复,欢迎继续交流。

正在加载回复...