Water Pump

【题目链接】Water Pump

【题目类型】单调栈

&题解:

这题可以枚举缺口,共n-1个,之后把前缀面积和后缀面积用O(n)打一下表,最后总面积减去前缀的i个和后缀的n-1-i个面积就是现在第i+1给缺口漏水的面积

&代码:

#include <cstdio>
#include <iostream>
#include <set>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <map>
#include <stack>
#include <queue>
#include <vector>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
using ll=long long;
const int maxn= 1e5 +9;
int n,a[maxn];
ll le[maxn],ri[maxn];
stack<pair<int,int> > sti;
ll sol(int t[],ll an[])
{
sti.emplace(t[0],0);
for(int i=1;i<n;i++){
while(sti.size()>1&&sti.top().first<=t[i]) sti.pop();
int fi=sti.top().first,se=sti.top().second;
if(sti.size()==1){
if(t[i]<fi){
an[i]=min(fi,t[i])*(i-se)+an[se];
}
else{
an[i]=min(fi,t[i])*(i-se)+an[se];
sti.pop();
}
}
else{
an[i]=min(fi,t[i])*(i-se)+an[se];
}
sti.emplace(t[i],i);
}
}
int main()
{
// ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
freopen("E:1.txt","r",stdin);
int T;scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",a+i);
while(sti.size()) sti.pop();
sol(a,le);
reverse(a,a+n);
while(sti.size()) sti.pop();
sol(a,ri);
reverse(ri,ri+n);
// for(int i=1;i<n;i++){
// cout<<le[i]<<" ";
// }cout<<endl;
// for(int i=1;i<n;i++){
// cout<<ri[i]<<" ";
// }cout<<endl;
ll ans=0;
for(int i=1;i<n;i++){
// printf("%lld====\n",le[n-1]-le[i]-ri[i+1]);
ans=max(ans,abs(le[n-1]-(le[i]+ri[i+1])));
}
printf("%lld\n",ans);
memset(a,0,sizeof(a));
for(int i=0;i<n;i++){
le[i]=ri[i]=0;
}
}
return 0;
}

CSU 1838 Water Pump(单调栈)的更多相关文章

  1. LeetCode Monotone Stack Summary 单调栈小结

    话说博主在写Max Chunks To Make Sorted II这篇帖子的解法四时,写到使用单调栈Monotone Stack的解法时,突然脑中触电一般,想起了之前曾经在此贴LeetCode Al ...

  2. 单调队列 && 单调栈

    单调队列 && 单调栈 单调队列 维护某个滑动区间的min or max,可用于dp的优化 以维护min为例,采用STL双端队列实现 每次加入元素x前 先检查队首元素==滑动后要删除的 ...

  3. 单调栈and单调队列(此文太多坑了,以后再填)

    单调栈 单调栈是一种特殊的栈,特殊之处在于栈内的元素都保持一个单调性,可能为单调递增,也可能为单调递减. 性质: 单调栈里的元素具有单调性 元素加入栈前,会在栈顶端把破坏栈单调性的元素都删除 使用单调 ...

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. B. Salty Fish Go! -期望题(瞎搞题)

    链接:https://www.nowcoder.com/acm/contest/104/B来源:牛客网 题意:A few days ago, WRD was playing a small game ...

  2. 理解套接字Socket

    Socket 在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信. 需要记住的知识点: 监听的 Socket 和真正用来传数据的 So ...

  3. I do think I can breakdown the problem into parts that make sense

    RESTful Web APIs_2013 An API released today will be named after the company that hosts it. We talk a ...

  4. [daily] 主机间目录共享

    1. 安装 nfs工具 [root@D128 j]# yum install nfs-utils 2. 修改配置文件: 1.  查看一下语法. [root@D128 j]# man exports 2 ...

  5. Python开发【异步】:asyncio

    异步asyncio asyncio是一个使用async / await语法编写并发代码的库. asyncio用作多个Python异步框架的基础,这些框架提供高性能的网络和Web服务器,数据库连接库,分 ...

  6. bzoj 2563 [2012国家集训队Round 1 day2] 阿狸和桃子的游戏 贪心

    正解:贪心 解题报告: 链接在这儿! 知道解法之后会jio的好像很简单的样子……其实挺难想到的QAQ 不过大佬讲了方法之后还是懂了 有一个很神仙的想法就是,你可以理解为每个点周围的边都有半个是自己的, ...

  7. 重读《深入理解Java虚拟机》一、Java虚拟机内存区域的划分

    一.Java虚拟机内存区域如何划分 1.Java虚拟机内存区域的划分 区域名称 作用(用途) 类型 特点 虚拟机规定异常情况 内存分配与回收 其他说明 1 程序计数器 指示当前正在执行的字节码指令地址 ...

  8. xpath定位方法详解

    1.xpath较复杂的定位方法: 现在要引用id为“J_password”的input元素,可以像下面这样写: WebElement password = driver.findElement(By. ...

  9. 第 6 章 es5 对象创建和继承

    目录 第 6 章 Object 一.创建对象 1. 字面量 2. 工厂模式 3. 构造函数 4. 原型 5. 构造+原型 6. 其他 二.Object静态属性 Object.definePropert ...

  10. 第 9 章 DOM 的增删改查

    DOM 的增删改查 本文不会详细讲解,只是简单提及知识要点,详细可以参考<dom高级编程>. 1. document.write document.write('<h1>创建节 ...