zoukankan      html  css  js  c++  java
  • bzoj1878

    http://www.lydsy.com/JudgeOnline/problem.php?id=1878

    只会莫队做。。。

    树状数组

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 1000010;
    struct query {
        int l, r, id;
    } q[N];
    int n, m, color;
    int c[N], tree[N], ans[N], pre[N][2];
    bool cp(query i, query j) { return i.r < j.r; }
    namespace bit
    {
        int lowbit(int i) { return i & (-i); }
        void update(int pos, int delta)
        {
            for(int i = pos; i <= n; i += lowbit(i)) tree[i] += delta;
        }
        int ask(int pos)
        {
            int ret = 0;
            for(int i = pos; i; i -= lowbit(i)) ret += tree[i];
            return ret;
        }
    } using namespace bit;
    int main()
    {
        scanf("%d%d%d", &n, &color, &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].id = i;
        sort(q + 1, q + m + 1, cp);
        int pos = 0;
        for(int i = 1; i <= m; ++i)
        {
            if(pre[c[i]][0]) update(pre[c[i]][0], 1);
            if(pre[c[i]][1]) update(pre[c[i]][1], -1);
            pre[c[i]][1] = pre[c[i]][0];
            pre[c[i]][0] = i;
            while(q[pos + 1].r == i) 
            {
                ++pos; ans[q[pos].id] = ask(q[pos].r) - ask(q[pos].l - 1);        
            }    
        }
        for(int i = 1; i <= m; ++i) printf("%d
    ", ans[i]);
        return 0;
    }
    View Code
  • 相关阅读:
    Java自学二十六天
    Java自学三十四天
    Java自学三十二天
    Java自学三十天
    Java开学考试心得
    Java自学二十九天
    Java自学二十八天
    Java自学三十一天
    Java自学三十三天
    2020年月12日Java学习日记
  • 原文地址:https://www.cnblogs.com/19992147orz/p/6739767.html
Copyright © 2011-2022 走看看