zoukankan      html  css  js  c++  java
  • BZOJ1537 [POI2005]Aut- The Bus

    恩。。。一开始以为是二维树状数组随便搞。。。

    后来看到数据范围额。。。

    好吧,首先离散化x,按y排序,然后树状数组维护前缀和最大值即可。

    (zky巨巨说是dp,那就算是dp好了,唔~)

    离散化的时候偷懒用了map 233

     1 /**************************************************************
     2     Problem: 1537
     3     User: rausen
     4     Language: C++
     5     Result: Accepted
     6     Time:780 ms
     7     Memory:5412 kb
     8 ****************************************************************/
     9  
    10 #include <cstdio>
    11 #include <algorithm>
    12 #include <map>
    13  
    14 #define lowbit(x) x & -x
    15 using namespace std;
    16 typedef map <int, int> Map;
    17 typedef Map::iterator ITER;
    18 const int N = 100005;
    19  
    20 struct point {
    21     int x, y, v;
    22     inline bool operator < (const point &b) const {
    23         return y == b.y ? x < b.x : y < b.y;
    24     }
    25 } a[N];
    26  
    27 Map w;
    28 int n, BIT[N], tot, ans;
    29  
    30 inline int read() {
    31     int x = 0;
    32     char ch = getchar();
    33     while (ch < '0' || '9' < ch)
    34         ch = getchar();
    35     while ('0' <= ch && ch <= '9') {
    36         x = x * 10 + ch - '0';
    37         ch = getchar();
    38     }
    39     return x;
    40 }
    41  
    42 inline void update(int x, int d) {
    43     while (x <= n)
    44         BIT[x] = max(BIT[x], d), x += lowbit(x);
    45 }
    46  
    47 inline int query(int x) {
    48     int res = 0;
    49     while (x)
    50         res = max(res, BIT[x]), x -= lowbit(x);
    51     return res;
    52 }
    53  
    54  
    55 int main() {
    56     int i, x;
    57     ITER it;
    58     read(), read(), n = read();
    59     for (i = 1; i <= n; ++i) {
    60         a[i].x = read(), a[i].y = read(), a[i].v = read();
    61         w[a[i].x] = 1;
    62     }
    63     sort(a + 1, a + n + 1);
    64     for (it = w.begin(); it != w.end(); ++it)
    65         it -> second = ++tot;
    66     for (i = 1; i <= n; ++i)
    67         a[i].x = w[a[i].x];
    68     for (i = 1; i <= n; ++i) {
    69         x = query(a[i].x) + a[i].v;
    70         update(a[i].x, x);
    71         ans = max(ans, x);
    72     }
    73     printf("%d
    ", ans);
    74     return 0;
    75 }
    View Code
    By Xs酱~ 转载请说明 博客地址:http://www.cnblogs.com/rausen
  • 相关阅读:
    构建之法 阅读笔记04
    团队项目-个人博客6.6
    个人总结
    第十六周学习进度条
    第十五周学习进度条
    构建之法阅读笔记07
    大道至简阅读笔记03
    大道至简阅读笔记02
    大道至简阅读笔记01
    第十四周学习进度条
  • 原文地址:https://www.cnblogs.com/rausen/p/4132859.html
Copyright © 2011-2022 走看看