dp+树状数组

一维排序,一维离散化,然后跑lis,其实就是一个二维偏序

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N = ;
  4. int dp[N], tree[N];
  5. struct data {
  6. int x, y, p;
  7. inline bool friend operator < (data A, data B)
  8. {
  9. return A.x == B.x ? A.y < B.y : A.x < B.x;
  10. }
  11. } a[N];
  12. int n, m, k, ans;
  13. inline int lowbit(int i)
  14. {
  15. return i & (-i);
  16. }
  17. inline void update(int pos, int delta)
  18. {
  19. for(int i = pos; i <= m; i += lowbit(i)) tree[i] = max(tree[i], delta);
  20. }
  21. inline int query(int pos)
  22. {
  23. int ret = ;
  24. for(int i = pos; i; i -= lowbit(i)) ret = max(ret, tree[i]);
  25. return ret;
  26. }
  27. int main()
  28. {
  29. scanf("%d%d%d", &n, &m, &k);
  30. vector<int> vt;
  31. for(int i = ; i <= k; ++i)
  32. {
  33. scanf("%d%d%d", &a[i].x, &a[i].y, &a[i].p);
  34. vt.push_back(a[i].y);
  35. }
  36. sort(vt.begin(), vt.end());
  37. vt.erase(unique(vt.begin(), vt.end()), vt.end());
  38. for(int i = ; i <= k; ++i) a[i].y = lower_bound(vt.begin(), vt.end(), a[i].y) - vt.begin() + ;
  39. m = vt.size() + ;
  40. sort(a + , a + k + );
  41. for(int i = ; i <= k; ++i)
  42. {
  43. dp[i] = query(a[i].y) + a[i].p;
  44. ans = max(ans, dp[i]);
  45. update(a[i].y, dp[i]);
  46. }
  47. printf("%d\n", ans);
  48. return ;
  49. }

bzoj1537的更多相关文章

  1. BZOJ1537: [POI2005]Aut- The Bus

    1537: [POI2005]Aut- The Bus Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 158  Solved: 100[Submit][S ...

  2. bzoj千题计划148:bzoj1537: [POI2005]Aut- The Bus

    http://www.lydsy.com/JudgeOnline/problem.php?id=1537 朴素的转移:dp[i][j]=max(dp[i][j-1],dp[i-1][j])+p[i][ ...

  3. 「BZOJ1537」Aut – The Bus(变形Dp+线段树/树状数组 最优值维护)

    网格图给予我的第一反应就是一个状态 f[i][j] 表示走到第 (i,j) 这个位置的最大价值. 由于只能往下或往右走转移就变得显然了: f[i][j]=max{f[i-1][j], f[i][j-1 ...

  4. [转载]hzwer的bzoj题单

    counter: 664BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ120 ...

  5. BZOJ刷题列表【转载于hzwer】

    沿着黄学长的步伐~~ 红色为已刷,黑色为未刷,看我多久能搞完吧... Update on 7.26 :之前咕了好久...(足见博主的flag是多么emmm......)这几天开始会抽时间刷的,每天几道 ...

随机推荐

  1. django2

    八 Models 数据库的配置 1    django默认支持sqlite,mysql, oracle,postgresql数据库.  <1> sqlite django默认使用sqlit ...

  2. Leetcode 188.买卖股票的最佳时机IV

    买卖股票的最佳时机IV 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意: 你不能同时参与多笔交易(你必 ...

  3. HDU-5583-Kingdom of Black and White(2015ACM/ICPC亚洲区上海站-重现赛)

    Kingdom of Black and White                                                                           ...

  4. oracle exp direct 执行机制

    使用直接导出模式 direct=y exp 比传统模式导出快一倍 oracle提供2种模式导出表数据,传统模式CONVENTIONAL PATH和直接模式DIRECT PATH,有direct指定. ...

  5. 莫(meng)比(bi)乌斯反演--BZOJ2301: [HAOI2011]Problem b

    n<=50000个询问,每次问a<=x<=b,c<=y<=d中有多少gcd(x,y)=K的(x,y).a,b,c,d,K<=50000. 这大概是入门题辣..这里记 ...

  6. msp430入门编程03

    msp430的C标识符和关键字 msp430入门学习 msp430入门编程

  7. NIST的安全内容自动化协议(SCAP)以及SCAP中文社区简介

    https://blog.csdn.net/langkew/article/details/8795530?utm_source=tuicool&utm_medium=referral

  8. 找宝箱 (bfs)

    Problem Description 作为一个强迫症患者,小 Y 在走游戏里的迷宫时一定要把所有的宝箱收集齐才肯罢休.现在给你一个 N *M 的迷宫,里面有障碍.空地和宝箱,小 Y 在某个起始点,每 ...

  9. SOJ 2818_QQ音速

    [题意]两只手,一次只能用一只手按一个键子(0,1,2,3),给出从i键到j键所需的消耗的体力,求依次按下一系列键子所需最小体力. [分析] 法一:开一个三维数组,分别记录移动到位置及左右手按的键子. ...

  10. Evaluate Reverse Polish Notation(逆波兰式)

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...