zoukankan      html  css  js  c++  java
  • 【BZOJ】2743: [HEOI2012]采花(树状数组)

    题目

    传送门:QWQ

    分析

    已经凉凉。看错数据范围敲了发莫队........

    和HH的项链差不多,把每种颜色之前的颜色到再之前的颜色这段区间 区间加。

    区间加就树状数组特技

    代码

    #include <bits/stdc++.h>
    const int maxn=2e6+10;
    using namespace std;
    struct data{
        int num,l,r;
    }Q[maxn]; 
    int c[maxn],ans[maxn],pre[maxn],front[maxn],bit[maxn];
    int n,m,o;
    bool cmp(data a,data b){
        return a.r<b.r;
    }
    void add(int x,int a){if(!x)return; for(;x<=n;x+=x&-x) bit[x]+=a; }
    int sum(int x){int ans=0; for(;x>0;x-=x&-x) ans+=bit[x]; return ans;}
    int main(){
         scanf("%d%d%d",&n,&o,&m);
        for(int i=1;i<=n;i++) scanf("%d",&c[i]);
        for(int i=1;i<=m;i++){
            scanf("%d%d",&Q[i].l,&Q[i].r);
            Q[i].num=i;
        }
        sort(Q+1,Q+1+m,cmp);
        int now=1;
        for(int i=1;i<=m;i++){
            pre[i]=front[c[i]]; front[c[i]]=i;
            add(pre[pre[i]],-1); add(pre[i],1);
            while(Q[now].r==i) ans[Q[now].num]=sum(i)-sum(Q[now].l-1),now++;
        }
        for(int i=1;i<=m;i++){
            printf("%d
    ",ans[i]);
        }
        return 0;
    }
  • 相关阅读:
    form标签
    roadmap
    自我介绍
    3 week work—Grid Layout
    3 week work—Position
    2nd week
    objects
    个人简介
    7th week :DOM BOM
    颜色表示法
  • 原文地址:https://www.cnblogs.com/noblex/p/9126297.html
Copyright © 2011-2022 走看看