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]);
    }

  • 相关阅读:
    简单使用Git和Github来管理自己的代码和读书笔记
    js中的事件委托
    join和split的区别
    浮动的清除方式
    图片代替多选(单选)按钮
    js和jquery实现简单的选项卡
    闭包——之初理解
    Django REST framework+Vue 打造生鲜超市(七)
    Django REST framework+Vue 打造生鲜超市(六)
    Django REST framework+Vue 打造生鲜超市(五)
  • 原文地址:https://www.cnblogs.com/lmjer/p/8543606.html
Copyright © 2011-2022 走看看