RE求助
  • 板块灌水区
  • 楼主Enquir
  • 当前回复0
  • 已保存回复0
  • 发布时间2019/11/16 22:45
  • 上次更新2024/10/7 21:28:06
查看原帖
RE求助
108975
Enquir楼主2019/11/16 22:45

2709 小B的询问

莫队板子但我RE了

#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int siz,ans;
int a[500005];
int be[500005];
int num[500005];
struct haha
{
    int l,r,id,ans;
}ha[500005];
bool cmp1(haha x,haha y)
{
    if(be[x.l]==be[y.l])
        return x.r<y.r;
    return be[x.l]<be[y.l];
}
bool cmp2(haha x,haha y)
{
    return x.id<y.id;
}
int main()
{
    scanf("%d%d%d",&n,&m,&k);
    siz=sqrt(n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        be[i]=(i-1)/siz+1;
    }
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&ha[i].l,&ha[i].r);
        ha[i].id=i;
    }
    sort(ha+1,ha+m+1,cmp1);
    int L=1,R=0;
    for(int i=1;i<=m;i++)
    {
        while(L<ha[i].l)
        {
            ans-=num[a[L]]*num[a[L]];
            num[a[L]]--;
            ans+=num[a[L]]*num[a[L]];
            L++;
        }
        while(L>ha[i].l)
        {
            L++;
            ans-=num[a[L]]*num[a[L]];
            num[a[L]]++;
            ans+=num[a[L]]*num[a[L]];
        }
        while(R>ha[i].r)
        {
            ans-=num[a[R]]*num[a[R]];
            num[a[R]]--;
            ans+=num[a[R]]*num[a[R]];
            R--;
        }
        while(R<ha[i].r)
        {
            R++;
            ans-=num[a[R]]*num[a[R]];
            num[a[R]]++;
            ans+=num[a[R]]*num[a[R]];

        }
        ha[i].ans=ans;
    }
    sort(ha+1,ha+m+1,cmp2);
    for(int i=1;i<=m;i++)
        printf("%d\n",ha[i].ans);
    return 0;
}
2019/11/16 22:45
加载中...