zoukankan      html  css  js  c++  java
  • BZOJ 1878 HH的项链

    不能分块(显然复杂度会炸啊。。。。。)

    离线+BIT。每个颜色在每个询问中只出现一次。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define maxn 50050
    #define maxm 200050
    #define maxc 1000500
    using namespace std;
    int n,a[maxn],aft[maxn],pre[maxn],regis[maxc],ans[maxm],m,p=1,t[maxn];
    struct query
    {
        int l,r,id;
    }q[maxm];
    bool cmp(query x,query y)
    {
        if (x.l==y.l) return x.r<y.r;
        return x.l<y.l;
    }
    int lowbit(int x)
    {
        return (x&(-x));
    }
    void add(int x,int val)
    {
        for (int i=x;i<=n;i+=lowbit(i))
            t[i]+=val;
    }
    int ask(int x)
    {
        int ret=0;
        for (int i=x;i>=1;i-=lowbit(i))
            ret+=t[i];
        return ret;
    }
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            pre[i]=regis[a[i]];aft[pre[i]]=i;
            regis[a[i]]=i;
        }    
        scanf("%d",&m);
        for (int i=1;i<=m;i++)
        {
            scanf("%d%d",&q[i].l,&q[i].r);
            q[i].id=i;
        }
        for (int i=1;i<=n;i++)
        {
            if (!pre[i]) add(i,1);
            if (!aft[i]) aft[i]=n+1;
        }
        sort(q+1,q+m+1,cmp);
        for (int i=1;i<=m;i++)
        {
            for (int j=p;j<=q[i].l-1;j++)
            {
                add(j,-1);add(aft[j],1);
            }
            p=q[i].l;
            ans[q[i].id]=ask(q[i].r)-ask(q[i].l-1);
        }
        for (int i=1;i<=m;i++)
            printf("%d
    ",ans[i]);
        return 0;
    }
  • 相关阅读:
    计算机组成原理小结
    selenium基本操作
    selenium实现网易邮箱的登录注册
    如何安装selenium框架
    2020年目标
    个人对软件测试的认识
    java b2b2c电商系统javashop7.2发布
    基于脚本引擎的运费架构分享
    模拟支付宝微信回调
    Javashop电商系统7.2发布
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/5875433.html
Copyright © 2011-2022 走看看