zoukankan      html  css  js  c++  java
  • BZOJ3262 陌上花开

    前人之述备矣、、、

    树套树即BIT套treapCQD分治 + BIT的方法都有了

    于是就做好了233

     1 /**************************************************************
     2     Problem: 3262
     3     User: rausen
     4     Language: C++
     5     Result: Accepted
     6     Time:1356 ms
     7     Memory:5888 kb
     8 ****************************************************************/
     9  
    10 #include <cstdio>
    11 #include <algorithm>
    12  
    13 #define lowbit(x) x & -x
    14 using namespace std;
    15 const int N = 100005;
    16  
    17 struct data {
    18     int a, b, c, s, ans;
    19 }a[N], p[N];
    20 inline bool sort1_cmp (const data &a, const data &b) {
    21     return a.a == b.a ? (a.b == b.b ? a.c < b.c : a.b < b.b) : a.a < b.a;
    22 }
    23 inline bool operator < (const data &a, const data &b) {
    24     return a.b == b.b ? a.c < b.c : a.b < b.b;
    25 }
    26 inline bool operator == (const data &a, const data &b) {
    27     return a.a == b.a && a.b == b.b && a.c == b.c;
    28 }
    29 inline bool operator != (const data &a, const data &b) {
    30     return !(a == b);
    31 }
    32  
    33 int tot, n, m, BIT[N << 1], ans[N];
    34  
    35 inline int read() {
    36     int x = 0;
    37     char ch = getchar();
    38     while (ch < '0' || '9' < ch)
    39         ch = getchar();
    40     while ('0' <= ch && ch <= '9') {
    41         x = x * 10 + ch - '0';
    42         ch = getchar();
    43     }
    44     return x;
    45 }
    46  
    47 inline void update(int x, int del) {
    48     while (x <= m)
    49         BIT[x] += del, x += lowbit(x);
    50 }
    51  
    52 inline int query(int x) {
    53     int res = 0;
    54     while (x)
    55         res += BIT[x], x -= lowbit(x);
    56     return res;
    57 }
    58  
    59 void work(int l, int r) {
    60     if (l == r) return;
    61     int mid = l + r >> 1, i, j;
    62     work(l, mid), work(mid + 1, r);
    63     sort(p + l, p + mid + 1), sort(p + mid + 1, p + r + 1);
    64     for (i = l, j = mid + 1; j <= r; ++j) {
    65         for (; i <= mid && p[i].b <= p[j].b; ++i)
    66             update(p[i].c, p[i].s);
    67         p[j].ans += query(p[j].c);
    68     }
    69     for (j = l; j < i; ++j)
    70         update(p[j].c, -p[j].s);
    71 }
    72  
    73 int main() {
    74     int i, cnt;
    75     tot = read(), m = read();
    76     for (i = 1; i <= tot; ++i)
    77         a[i].a = read(), a[i].b = read(), a[i].c = read();
    78     sort(a + 1, a + tot + 1, sort1_cmp);
    79     for (cnt = 1, i = 1; i <= tot; ++i, ++cnt)
    80         if (a[i] != a[i + 1]) {
    81             p[++n] = a[i];
    82             p[n].s = cnt;
    83             cnt = 0;
    84         }
    85     work(1, n);
    86     for (i = 1; i <= n; ++i)
    87         ans[p[i].ans + p[i].s - 1] += p[i].s;
    88     for (i = 0; i < tot; ++i)
    89         printf("%d
    ", ans[i]);
    90     return 0;
    91 }
    View Code
    By Xs酱~ 转载请说明 博客地址:http://www.cnblogs.com/rausen
  • 相关阅读:
    ios每日一发--Leanclude数据云存储以及登录 注册账户
    ios每日一发--仿侧边抽屉效果
    ios-自定义alertView提示框
    ios
    UIStepper 缩放:UI的使用
    UIButton 关灯小实验
    将一个字典内的内value转换为集合:返回一个数组,此数组中包含输入字典的键值对中的数组的所有元素(为NSArray添加category)
    为集合排序的三个方法
    NSMutableDictionary
    头文件导入方式
  • 原文地址:https://www.cnblogs.com/rausen/p/4116773.html
Copyright © 2011-2022 走看看