Problem E: 积木积水

Description

现有一堆边长为1的已经放置好的积木,小明(对的,你没看错,的确是陪伴我们成长的那个小明)想知道当下雨天来时会有多少积水。小明又是如此地喜欢二次元,于是他把这个三维的现实问题简化成二维的问题。设雨量无穷、积木不透水、积木间无缝连接,问在这个二次元的世界里,已放置好的积木会有多少单位的积水量?

Input

第一行包含一个整数T(T≤100),表示接下来的测试样例个数。 每个测试样例有两行组成: 第一行包含一个整数N(N≤1e6),表示积木的列数; 第二行包含N个整数Ai(Ai≤1e6),表示第i列积木的个数。

Output

每个样例输出一行,包含一个整数,为题目所求。

Sample Input

1 11 6 2 2 4 2 0 3 4 4 5 1

Sample Output

19

按照聚聚的方法(理解估计有问题,复杂度应该比他的更高...)刚开始TLE几次,用输入外挂也TLE,把同步关了却1984MS险过.....本渣以后再也不敢用输入外挂了。有空想想其他方法做吧。

代码:

#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<cmath>
#include<queue>
#include<set>
#include<map>
using namespace std;
int r[1000010];
int high[1000010];
int l[1000010];
int main (void)
{
ios::sync_with_stdio(false);
int n,i,j,T;
cin>>T;
while (T--)
{
cin>>n;
int maxm=-1;
for (i=1; i<=n; i++)
{
cin>>high[i];
l[i]=max(l[i-1],high[i]);//从前到后高度更新
}
for (i=n; i>=1; i--)
{
r[i]=max(high[i],r[i+1]);//从后往前高度更新
}
long long ans=0;//
for (i=1; i<=n; i++)
{
ans=ans+min(r[i],l[i])-high[i];
}
cout<<ans<<endl;
memset(r,0,sizeof(r));
memset(l,0,sizeof(l));
memset(high,0,sizeof(high));
}
return 0;
}

最新文章

  1. 解决“动软代码生成器在SqlServer中会将唯一索引识别为主键&quot;的Bug
  2. css3 transform的基本用法和介绍
  3. Spring3系列11- Spring AOP——自动创建Proxy
  4. vim与shell的切换
  5. nginx模块开发(18)—日志分析
  6. UIApplication深入研究
  7. yii2源码学习笔记(十八)
  8. RPC分布式处理
  9. SpringJDBC学习之路(1)
  10. svn检出服务器项目中出现的could not connect to server
  11. iOS 单选框
  12. elementUI el-select 中disabled设置
  13. Tomcat 日志文件分割
  14. Mybatis 元素内容必须由格式正确的字符数据或标记组成
  15. 发送HTTPS请求
  16. 源码研究:php变量
  17. Jmeter(三十五)聚合报告
  18. nodejs项目进程管理器之pm2
  19. Invalid argument during startup: unknown conf file parameter : requirepass
  20. Sprint7

热门文章

  1. Android(java)学习笔记107:Relativelayout相对布局
  2. eclipse中代码注释及其他常用快捷键
  3. IntelliJ IDEA java设置程序运行时内存
  4. JDK的安装以及环境变量的配置
  5. HTML DOM Frame 的 src
  6. 关于SQL语言的初步认识
  7. C#基础-数组-冒泡排序
  8. 安全和加密——openssl及自建CA
  9. 私有DockerHub搭建
  10. 常用的windows小工具指令和如何打开自定义的程序