传送门

好难的题。。至少对我来说。

这题就是模拟从最低的平台注水,然后将最低的填满以后从最低的平台向两边扩展,每次找最近的最低的平台h,然后将水填到h高度。 栈里存的是向外扩展的时候,有时会遇到高度递减的情况,这时并不能填水,但要把这些高度都递减(即扩展时的顺序)记录进栈,然后遇到一个比比水面高的平台h时,模拟倒水,水会挨个淹没最低的平台,即需要从栈顶一个一个出战计算淹没时间,直至栈顶平台高度>h,此时h入栈。重复执行就可算出答案。

  1. #include <cstdio>
  2. #include <iostream>
  3. #define N 100011
  4. #define INF 1000011
  5. #define LL long long
  6. #define min(x, y) ((x) < (y) ? (x) : (y))
  7.  
  8. int s[N];
  9. int n, p = 1, top;
  10. LL t, sum[N], h[N], w[N], add[N], ans[N];
  11.  
  12. inline LL read()
  13. {
  14. LL x = 0, f = 1;
  15. char ch = getchar();
  16. for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
  17. for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
  18. return x * f;
  19. }
  20.  
  21. int main()
  22. {
  23. int i, l, r;
  24. n = read();
  25. h[0] = h[n + 1] = INF;
  26. for(i = 1; i <= n; i++)
  27. {
  28. sum[i] = sum[i - 1] + read();
  29. h[i] = read();
  30. if(h[p] > h[i]) p = i;
  31. }
  32. for(i = 1; i <= n + 1; i++)
  33. {
  34. while(top && h[s[top]] < h[i])
  35. {
  36. w[s[top]] = sum[i - 1] - sum[s[top - 1]];
  37. add[s[top]] = w[s[top]] * (min(h[s[top - 1]], h[i]) - h[s[top]]);
  38. top--;
  39. }
  40. s[++top] = i;
  41. }
  42. top = 0;
  43. l = r = s[++top] = p;
  44. for(i = 1; i <= n; i++)
  45. {
  46. if(h[l - 1] < h[r + 1]) p = --l;
  47. else p = ++r;
  48. while(top && h[s[top]] < h[p])
  49. {
  50. ans[s[top]] = t + w[s[top]];
  51. t += add[s[top]];
  52. top--;
  53. }
  54. s[++top] = p;
  55. }
  56. for(i = 1; i <= n; i++) printf("%lld\n", ans[i]);
  57. return 0;
  58. }

  

[BZOJ1595] [Usaco2008 Jan]人工湖(单调栈)的更多相关文章

  1. BZOJ1595 [Usaco2008 Jan]人工湖

    直接模拟...从最低的开始向两边拓展= = /************************************************************** Problem: 1595 ...

  2. BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 8748  Solved: 3835[Submi ...

  3. BZOJ 4453: cys就是要拿英魂![后缀数组 ST表 单调栈类似物]

    4453: cys就是要拿英魂! Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 90  Solved: 46[Submit][Status][Discu ...

  4. BZOJ 3238: [Ahoi2013]差异 [后缀数组 单调栈]

    3238: [Ahoi2013]差异 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 2326  Solved: 1054[Submit][Status ...

  5. poj 2559 Largest Rectangle in a Histogram - 单调栈

    Largest Rectangle in a Histogram Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19782 ...

  6. bzoj1510: [POI2006]Kra-The Disks(单调栈)

    这道题可以O(n)解决,用二分还更慢一点 维护一个单调栈,模拟掉盘子的过程就行了 #include<stdio.h> #include<string.h> #include&l ...

  7. BZOJ1057[ZJOI2007]棋盘制作 [单调栈]

    题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳. 而我们的 ...

  8. 洛谷U4859matrix[单调栈]

    题目描述 给一个元素均为正整数的矩阵,上升矩阵的定义为矩阵中每行.每列都是严格递增的. 求给定矩阵中上升子矩阵的数量. 输入输出格式 输入格式: 第一行两个正整数n.m,表示矩阵的行数.列数. 接下来 ...

  9. POJ3250[USACO2006Nov]Bad Hair Day[单调栈]

    Bad Hair Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17774   Accepted: 6000 Des ...

随机推荐

  1. [windows]命令行关机或重启电脑

    1.关机:菜单--〉运行--〉输入:cmd--〉输入:shutdown -s -t 0 2.重启:菜单--〉运行--〉输入:cmd--〉输入:shutdown -r -t 0 (注:“-r”代表重启, ...

  2. jdbc接口的一种类比——打酱油

    jdbc很简单,这里只是为了方便自己的记忆.模型也许有缺陷,但本质是相同的. jdbc可以屏蔽数据库的底层的不同,让我们有能力用java语言统一访问不同的数据库.就像打酱油一样,可以去超市买,也可以去 ...

  3. 如何通过Xcode 5中集成的XCTest框架进行简单的单元测试

    XCTest 1.第一个单元测试 XCTest是Xcode 5中自带的测试框架 下面从一个Demo开始.首先用Xcode新建一个工程UnitTestDemo,工程目录结构如下: 可以看到工程下面多了一 ...

  4. Linux系统里让vim支持markdown格式的语法高亮

    Markdown是深受程序员喜爱的一个文件格式. 然而Linux里默认的vim设置,并不支持markdown格式的语法高亮显示. 下面就来介绍如何设置使得markdown格式的文件在vim里也能享有语 ...

  5. 9.18 New Start

    好久没上cnblogs,今天提示我说园龄已经2年1个月了.今天就用一个日记的形式开始第一篇博客吧.我以后比较精髓的文章就放在cnblogs,csdn博客也继续会更新,不过也会慢慢提高文章质量. 今天是 ...

  6. SQLite-表达式

    SQLite -表达式 一个表达式是一个或多个值的组合,运算符和SQL函数,评价一个值. SQL表达式就像公式和都写在查询语言.您还可以使用为特定的数据集查询数据库. 语法: 考虑到SELECT语句的 ...

  7. Tensorflow_入门学习_2_一个神经网络栗子

    3.0 A Neural Network Example 载入数据: from tensorflow.examples.tutorials.mnist import input_data mnist ...

  8. git快速入门(MAC系统,github,ssh key)

    如果使用过svn的话,git大致可以认为是多了本地库的svn.git先本地提交commit到本地库,然后再push到远程服务器的库.git是分布式的代码管理工具,基于SSH协议.ssh的作用就是为了不 ...

  9. VC-基础:隐藏不安全函数的warning-_CRT_SECURE_NO_WARNINGS

    >tmp.cpp(): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strc ...

  10. nyoj-248-buying feed

    http://acm.nyist.net/JudgeOnline/problem.php?pid=248 BUYING FEED 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 ...