首页 > 代码库 > BZOJ1537 [POI2005]Aut- The Bus
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 & -x15 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\n", ans);74 return 0;75 }
BZOJ1537 [POI2005]Aut- The Bus
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。