zoukankan      html  css  js  c++  java
  • 莫队

    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int N=250005;
    //const int M=200005;
    int n,m,a[N],s[N],belong[N],ans[N],color=0;
    struct q{int l,r,id;}t[N];
    int u[1000005];
    bool cmp(q x,q y)
    {
        if(belong[x.l]==belong[y.l]) return x.r<y.r;
        return x.l<y.l;
    }
    int Ans=0;
    int main()
    {
        memset(u,0,sizeof(u));
        memset(s,0,sizeof(s));
        scanf("%d",&n);int k=(int)(sqrt(n));
        for(int i=1;i<=n;i++)
        {
            int x;
            scanf("%d",&x);
            if(u[x]==0)
            {
                a[i]=++color;
                u[x]=a[i];
            }
            else a[i]=u[x];
        }//离散化
        for(int i=1;i<=n;i++) belong[i]=(i-1)/k+1;
        scanf("%d",&m);
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d",&t[i].l,&t[i].r);
            t[i].id=i;
        }
        sort(t+1,t+1+m,cmp);
        int l=1,r=0;
        for(int i=1;i<=m;i++)
        {
            while(l<t[i].l)
            {
                if(s[a[l]]==1) Ans--;
                s[a[l]]--;
                l++;
            }
            while(r>t[i].r)
            {
                if(s[a[r]]==1) Ans--;
                s[a[r]]--;
                r--;
            }
            while(l>t[i].l)
            {
                l--;
                if(s[a[l]]==0) Ans++;
                s[a[l]]++;
            }
            while(r<t[i].r)
            {
                r++;
                if(s[a[r]]==0) Ans++;
                s[a[r]]++;
            }
            ans[t[i].id]=Ans;
        }
        for(int i=1;i<=m;i++) printf("%d ",ans[i]);
    }

  • 相关阅读:
    淘宝---侧边栏信息展示效果
    微信小程序-video详解
    图片边框解决方案
    微信小程序-scroll-view隐藏滚动条
    jdk在windows中的配置
    Java 进制转换
    关于编程的思考
    深入解析String#intern
    String & StringBuilder & StringBuffer
    程序员分类
  • 原文地址:https://www.cnblogs.com/lmjer/p/8543606.html
Copyright © 2011-2022 走看看