比赛 2025.3.6 评测结果 AAATTTTTTT
题目名称 采花 最终得分 30
用户昵称 123 运行时间 46.701 s
代码语言 C++ 内存使用 13.18 MiB
提交时间 2025-03-06 20:54:03
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=1000010;
inline void read(int &x)
{
    int sum=0;
    char c=getchar();
    while (c<'0'||c>'9')
    {
        c=getchar();
    }
    while ('0'<=c&&c<='9')
    {
        sum=sum*10+(c-'0');
        c=getchar();
    }
    x=sum;
}
int n,t,q,len,cnt[N],a[N],v[N],id[N],l=1,r=0,ret=0;
struct node {
    int l,r,id;
} c[N];
inline int cmd(node x,node y)
{
    if (id[x.l]==id[x.r])
    {
        if (id[x.l]%2==1)
        {
            return x.r<y.r;
        }
        else
        {
            return x.r>y.r;
        }
    }
    return id[x.l]<id[y.l];
}
inline void change(int x,int c)
{
    cnt[a[x]]+=c;
    if(c>0)
    {
        ret+=(cnt[a[x]]==2);
    }
    else
    {
        ret-=(cnt[a[x]]==1);
    }
}
int main() {
    freopen("1flower.in","r",stdin);
    freopen("1flower.out","w",stdout);
    read(n),read(t),read(q);
    len=sqrt(n);
    for (register int i=1;i<=n;i++)
    {
        read(a[i]);
        id[i]=i/len+1;
    }
    for (register int i=1;i<=q;i++)
    {
        read(c[i].l),read(c[i].r);
        c[i].id=i;
    }
    sort(c+1,c+q+1,cmd);
    for (register int i=1;i<=q;i++)
    {
        while (l<c[i].l) change(l,-1),l++;
        while (l>c[i].l) change(l-1,1),l--;
        while (r<c[i].r) change(r+1,1),r++;
        while (r>c[i].r) change(r,-1),r--;
        v[c[i].id]=ret;
    }
    for (register int i=1;i<=q;i++)
    {
        printf("%d\n",v[i]);
    }
}