• BZOJ2743 [HEOI2012]采花


    本来想做这道题的。。。后来发现根本搞不懂

    于是又滚回了BZOJ 1878搞了搞。。。

    发现这道题和1878差不多,只是要注意update的时候要加个next

    其实我们可以推广到3个、4个、5个(貌似可以用倍增?感觉可以出一道题呢、、、)

    然后就没有然后啦~,不要问我为什么用了fread。。。只是无聊了≥v≤~

     1 /**************************************************************
     2     Problem: 2743
     3     User: rausen
     4     Language: C++
     5     Result: Accepted
     6     Time:3940 ms
     7     Memory:56472 kb
     8 ****************************************************************/
     9  
    10 #include <cstdio>
    11 #include <algorithm>
    12  
    13 #define lowbit(x) x & -x
    14 using namespace std;
    15 const int N = 1000005;
    16 const int Maxlen = 25 * N;
    17 struct data{
    18     int l, r, w;
    19     inline bool operator < (const data &x) const {
    20         return l == x.l ? r < x.r : l < x.l;
    21     }
    22 } q[N];
    23  
    24 int n, m, c;
    25 int a[N], next[N], first[N];
    26 int BIT[N];
    27 int ans[N];
    28  
    29 char buf[Maxlen], *C = buf;
    30 int Len;
    31 inline int read() {
    32     int x = 0;
    33     while (*C < '0' || '9' < *C) ++C;
    34     while ('0' <= *C && *C <= '9')
    35         x = x * 10 + *C - '0', ++C;
    36     return x;
    37 }
    38  
    39 int L, pr[10];
    40 void print(int x) {
    41     if (!x) {
    42         puts("0");
    43         return;
    44     }
    45     while (x)
    46         pr[++L] = x % 10, x /= 10;
    47     while (L)
    48         putchar(pr[L--] + '0');
    49     putchar('
    ');
    50 }
    51  
    52 void update(int x, int v) {
    53     if (!x) return;
    54     while (x <= n)
    55         BIT[x] += v, x += lowbit(x);
    56 }
    57   
    58 int query(int x) {
    59     int res = 0;
    60     while (x)
    61         res += BIT[x], x -= lowbit(x);
    62     return res;
    63 }
    64  
    65 int main() {
    66     int i, l;
    67     Len = fread(C, 1, Maxlen, stdin);
    68     buf[Len] = '';
    69     n = read(), c = read(), m = read();
    70     for (i = 1; i <= n; ++i)
    71         a[i] = read();
    72     for (i = n; i; --i)
    73         next[i] = first[a[i]], first[a[i]] = i;
    74     for (i = 1; i <= c; ++i)
    75         update(next[first[i]], 1);
    76  
    77     for (i = 1; i <= m; ++i)
    78         q[i].l = read(), q[i].r = read(), q[i].w = i;
    79     sort(q + 1, q + m + 1);
    80     for (i = l = 1; i <= m; ++i) {
    81         for (; l < q[i].l; ++l)
    82             update(next[l], -1), update(next[next[l]], 1);
    83         ans[q[i].w] = query(q[i].r) - query(q[i].l - 1);
    84     }
    85     for (i = 1; i <= m; ++i)
    86         print(ans[i]);
    87     return 0;
    88 }
    View Code
    By Xs酱~ 转载请说明 博客地址:http://www.cnblogs.com/rausen
  • 相关阅读:
    字符串转list
    vant下拉单选
    断点续传(上传)C#版
    7z压缩测试
    SQL SERVER查看表字段信息
    FTP安全组设置
    Unable to find @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest
    Charles 抓包使用教程
    董明珠语录
    京东 Vue3 组件库 nutui 3.0 发布,支持小程序开发
  • 原文地址:https://www.cnblogs.com/rausen/p/4162355.html
Copyright © 2020-2023  润新知