1 条题解

  • 0
    @ 2026-7-7 18:38:40

    我只用了 0.1s0.1s 就猜出来这题用什么东西了,你也来猜猜看吧!

    #include<bits/stdc++.h>
    using namespace std;
    const int N=5e5+10;
    int a[N],ans[N],cnt[N],B,mq,mr,sum;
    struct node{int l,r,id;}q[N];
    bool cmp(node n1,node n2){return n1.l/B!=n2.l/B?n1.l<n2.l:n1.r<n2.r;}
    void add(int x)
    {
    	if(cnt[x]==0)sum++;
    	cnt[x]++;
    }
    void del(int x)
    {
    	cnt[x]--;
    	if(cnt[x]==0)sum--;
    }
    int main()
    {
    	int n,m;cin>>n>>m;B=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].id=i;
    	sort(q+1,q+m+1,cmp);
    	for(int i=1,l=1,r=0;i<=m;i++)
    	{
    		while(l>q[i].l)add(a[--l]);
    		while(r<q[i].r)add(a[++r]);
    		while(l<q[i].l)del(a[l++]);
    		while(r>q[i].r)del(a[r--]);
    		ans[q[i].id]=sum;
    	}
    	for(int i=1;i<=m;i++)cout<<ans[i]<<'\n';
    	return 0;
    }
    • 1

    信息

    ID
    11945
    时间
    2000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    2
    已通过
    2
    上传者