CSU 1838 Water Pump(单调栈)
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(单调栈)的更多相关文章
- LeetCode Monotone Stack Summary 单调栈小结
话说博主在写Max Chunks To Make Sorted II这篇帖子的解法四时,写到使用单调栈Monotone Stack的解法时,突然脑中触电一般,想起了之前曾经在此贴LeetCode Al ...
- 单调队列 && 单调栈
单调队列 && 单调栈 单调队列 维护某个滑动区间的min or max,可用于dp的优化 以维护min为例,采用STL双端队列实现 每次加入元素x前 先检查队首元素==滑动后要删除的 ...
- 单调栈and单调队列(此文太多坑了,以后再填)
单调栈 单调栈是一种特殊的栈,特殊之处在于栈内的元素都保持一个单调性,可能为单调递增,也可能为单调递减. 性质: 单调栈里的元素具有单调性 元素加入栈前,会在栈顶端把破坏栈单调性的元素都删除 使用单调 ...
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8748 Solved: 3835[Submi ...
- BZOJ 4453: cys就是要拿英魂![后缀数组 ST表 单调栈类似物]
4453: cys就是要拿英魂! Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 90 Solved: 46[Submit][Status][Discu ...
- BZOJ 3238: [Ahoi2013]差异 [后缀数组 单调栈]
3238: [Ahoi2013]差异 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2326 Solved: 1054[Submit][Status ...
- poj 2559 Largest Rectangle in a Histogram - 单调栈
Largest Rectangle in a Histogram Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19782 ...
- bzoj1510: [POI2006]Kra-The Disks(单调栈)
这道题可以O(n)解决,用二分还更慢一点 维护一个单调栈,模拟掉盘子的过程就行了 #include<stdio.h> #include<string.h> #include&l ...
- BZOJ1057[ZJOI2007]棋盘制作 [单调栈]
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳. 而我们的 ...
随机推荐
- knowledge learning things TODO
加密分区 suricata调研 tor配置 tilda配置 automake / autoconf / libtool 使用 大页内存的深入原理 Memory channels Network Man ...
- select下拉菜单实现通过数据库查询来设置默认值
查询网上各种资料要不比较难理解,要么有问题,现有一种简单通俗的理解方法 思路:读取数据库数据1,数据2需用到select选择菜单,但是又想每次查看是都显示读数据库的默认信息 demo: {% for ...
- tensorflow入门笔记(五) name_scope和variable_scope
一.上下文管理器(context manager) 上下文管理器是实现了上下文协议的对象,主要用于资源的获取与释放.上下文协议包括__enter__.__exit__,简单说就是,具备__enter_ ...
- 【python-opencv】30-角点检测
[微语]世上有很多不可能,不过不要在你未尽全力之前下结论 特征检测:找到图像特征的技术 特征描述:描述图像特征 Harris角点检测(Corner Detection) 参考: https://doc ...
- Log4j rootLogger配置
Log4j 根配置语法 log4j.rootLogger = [ level ] , appenderName, appenderName, … 指代 把指定级别的日志信息输出到指定的一个或者多个位置 ...
- springmvc拦截器实现用户登录权限验证
实现用户登录权限验证 先看一下我的项目的目录,我是在intellij idea 上开发的 1.先创建一个User类 package cn.lzc.po; public class User { pri ...
- UIView和layer的区别
每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提供.两者都有树状层级结构,layer 内部有 SubLayers ...
- 20180323 DataTable增加DataRow方式优化
1. 我开始开发程序时,很多问题考虑不周期,不断的在改进中 最开始我的写法,创建一个DataTable 的Columns,采用语句 dt2.Columns.Add("ID"); 这 ...
- 使用DigitalOcean控制台访问Droplet(远程服务器)
介绍 大多数用户将使用SSH,PUTTY或安装的控制面板管理他们的DigitalOcean Droplet. 但是,可能会出现阻止您使用这些方法访问Droplet的情况. 例如,更改网络或服务配置文件 ...
- cxImage控件使用
属性: Picture:载入要显示的图片 Properties->Caption在没有内容的时候显示在图片框中间的文字 Properties->PopupMenuLayout->Me ...