dp[i = 前i中sorter][j = 将min移动到j位置] = 最短的sorter序列。

对于sorteri只会更新它右边端点r的位置,因此可以把数组改成一维的,dp[r] = min(dp[r],dp[j]+1), l≤j<r。

不是滑窗,单调队列用用不了,但是可以用线段树去维护这个最小值。

  1. /*********************************************************
  2. * ------------------ *
  3. * author AbyssalFish *
  4. **********************************************************/
  5. #include<cstdio>
  6. #include<iostream>
  7. #include<string>
  8. #include<cstring>
  9. #include<queue>
  10. #include<vector>
  11. #include<stack>
  12. #include<vector>
  13. #include<map>
  14. #include<set>
  15. #include<algorithm>
  16. #include<cmath>
  17. using namespace std;
  18.  
  19. #define para int o = 1, int l = 1,int r = n
  20. #define TEMPvar int mid = (l+r)>>1, lc = (o<<1), rc = (o<<1|1);
  21. #define lsn lc, l, mid
  22. #define rsn rc, mid+1, r
  23. #define insd ql<=l&&r<=qr
  24. const int maxn = 5e4;
  25. const int ST_SIZE = <<;
  26. const int INF = 0x3f3f3f3f;
  27. int Min[ST_SIZE];
  28. int n, m;
  29. int dp[maxn+];
  30.  
  31. void build(para)
  32. {
  33. if(l == r){
  34. Min[o] = dp[l];
  35. }else {
  36. TEMPvar
  37. build(lsn);
  38. build(rsn);
  39. Min[o] = min(Min[lc],Min[rc]);
  40. }
  41. }
  42.  
  43. int qpos,qval;
  44. void update(para)
  45. {
  46. if(l == r){
  47. Min[o] = qval;
  48. }else {
  49. TEMPvar
  50. if(qpos<=mid) update(lsn);
  51. else update(rsn);
  52. Min[o] = min(Min[lc],Min[rc]);
  53. }
  54. }
  55. int ql,qr;
  56. int qMin(para)
  57. {
  58. if(insd){ return Min[o]; }
  59. else {
  60. int res = INF;
  61. TEMPvar
  62. if(ql<=mid) res = min(res,qMin(lsn));
  63. if(qr>mid) res = min(res,qMin(rsn));
  64. return res;
  65. }
  66. }
  67.  
  68. //#define LOCAL
  69. int main()
  70. {
  71. #ifdef LOCAL
  72. freopen("in.txt","r",stdin);
  73. #endif
  74. scanf("%d%d",&n,&m);
  75. memset(dp+,0x3f,sizeof(int)*(n-));
  76. build();
  77. for(int i = ; i < m; i++){
  78. scanf("%d%d",&ql,&qr);
  79. if((qval = qMin()+) < dp[qr]){
  80. dp[qpos = qr] = qval;
  81. update();
  82. }
  83. }
  84. printf("%d\n",dp[n]);
  85. return ;
  86. }

POJ 1769 Minimizing maximizer (线段树优化dp)的更多相关文章

  1. poj 1769 Minimizing maximizer 线段树维护dp

    题目链接 给出m个区间, 按区间给出的顺序, 求出覆盖$ [1, n] $ 至少需要多少个区间. 如果先给出[10, 20], 在给出[1, 10], 那么相当于[10, 20]这一段没有被覆盖. 令 ...

  2. POJ.1769.Minimizing maximizer(线段树 DP)

    题目链接 /* 题意:有m个区间,问最少要多少个区间能覆盖[1,n] 注:区间要按原区间的顺序,不能用排序贪心做 设dp[i]表示最右端端点为i时的最小值 dp[e[i]]=min{dp[s[i]]~ ...

  3. POJ 2376 Cleaning Shifts (线段树优化DP)

    题目大意:给你很多条线段,开头结尾是$[l,r]$,让你覆盖整个区间$[1,T]$,求最少的线段数 题目传送门 线段树优化$DP$裸题.. 先去掉所有能被其他线段包含的线段,这种线段一定不在最优解里 ...

  4. Codeforces Round #426 (Div. 2) D 线段树优化dp

    D. The Bakery time limit per test 2.5 seconds memory limit per test 256 megabytes input standard inp ...

  5. BZOJ2090: [Poi2010]Monotonicity 2【线段树优化DP】

    BZOJ2090: [Poi2010]Monotonicity 2[线段树优化DP] Description 给出N个正整数a[1..N],再给出K个关系符号(>.<或=)s[1..k]. ...

  6. [AGC011F] Train Service Planning [线段树优化dp+思维]

    思路 模意义 这题真tm有意思 我上下楼梯了半天做出来的qwq 首先,考虑到每K分钟有一辆车,那么可以把所有的操作都放到模$K$意义下进行 这时,我们只需要考虑两边的两辆车就好了. 定义一些称呼: 上 ...

  7. 【bzoj3939】[Usaco2015 Feb]Cow Hopscotch 动态开点线段树优化dp

    题目描述 Just like humans enjoy playing the game of Hopscotch, Farmer John's cows have invented a varian ...

  8. 洛谷$P2605\ [ZJOI2010]$基站选址 线段树优化$dp$

    正解:线段树优化$dp$ 解题报告: 传送门$QwQ$ 难受阿,,,本来想做考试题的,我还造了个精妙无比的题面,然后今天讲$dp$的时候被讲到了$kk$ 先考虑暴力$dp$?就设$f_{i,j}$表示 ...

  9. D - The Bakery CodeForces - 834D 线段树优化dp···

    D - The Bakery CodeForces - 834D 这个题目好难啊,我理解了好久,都没有怎么理解好, 这种线段树优化dp,感觉还是很难的. 直接说思路吧,说不清楚就看代码吧. 这个题目转 ...

  10. 4.11 省选模拟赛 序列 二分 线段树优化dp set优化dp 缩点

    容易想到二分. 看到第一个条件容易想到缩点. 第二个条件自然是分段 然后让总和最小 容易想到dp. 缩点为先:我是采用了取了一个前缀最小值数组 二分+并查集缩点 当然也是可以直接采用 其他的奇奇怪怪的 ...

随机推荐

  1. C#判断字符串是否是数字最简单的正则表达式

    if (theStr!= null)//注意加非空判断,否则报错 { System.Text.RegularExpressions.Regex rex = new System.Text.Regula ...

  2. 【转】Asp.Net页面生命周期

    源地址:http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html

  3. cf837E(xjb)

    题目链接:http://codeforces.com/problemset/problem/837/E 题意:f(a, 0) = 0 ,     f(a, b) = 1 + f(a, b - gcd( ...

  4. 上传文件到linux乱码问题

    由于linux系统编码一般设置为utf-8,而中文windows下通常默认编码是gbk,因此经常需要将文件名或文件内容编码进行转换,文件名编码转换软件:convmv yum install convm ...

  5. print和sys.stdout

    print print语句执行的操作是一个写操作,把我们从外设输入的数据写到了stdout流,并进行了一些特定的格式化.和文件方法不同,在执行打印操作是,不需要将对象转换为字符串(print已经帮我们 ...

  6. (转)TComboBox patch for Delphi 7

    unit D7ComboBoxStringsGetPatch; // The patch fixes TCustomComboBoxStrings.Get method . interface {$I ...

  7. spring boot——MockMvc的用法 (SpringBoot 1.5.18)下测试通过

    spring boot——MockMvc的用法   1.pom配置 <dependency> <groupId>org.springframework.boot</gro ...

  8. Win7 桌面图标消失

    win7 桌面图标消失或任务栏也消失,可以按Ctrl+Shift+Esc键调出任务管理器,然后点击文件——新建任务,输入explorer.

  9. 牛客网练习赛26B(简单的dp)

    题目链接:https://www.nowcoder.com/acm/contest/180/B 链接:https://www.nowcoder.com/acm/contest/180/B来源:牛客网 ...

  10. SGU - 409

    题目链接:https://vjudge.net/contest/239445#problem/H 题目大意:输入n,k,有n*n* n*n的网格,要求每行每列刚好有k个*,每n*n的小方格内也刚好有k ...