Description

如上图所示的一个台阶他的积水量是4 + 2 + 4 + 3 + 4 = 17.

给你一个长度是n的台阶。告诉你每个台阶的高度,求积水量是多少?

Input

多组输入数据:

每组数据第一行一个整数n(1 <= n <= 100 000).

第二行n个整数,其中ai是第i个数。(0 <= ai <= 10 000)

Output

每组数据输出一行表示台阶的积水量。

Sample Input

10 2 5 1 3 1 2 1 7 7 6

Sample Output

17

想我大二的时候就左思右想不会做这道题。。。大三了觉得再做不出来太丢人。。。于是苦思冥想。。。。

开始的思路总是想从左到右扫一遍。。考虑各种情况总是有漏洞。。比如 5 2 3 1 2这种。。

卡在一个思路好久,奈何找不到题解。。。提问没人解答。。。

后来想到排序,然后从高到矮依次处理。如果该数在已处理的区间内那么就不用再考虑的,否则把该数位置到区间的中间填满,然后扩大已处理的区间。。

还是水题啊。。不过终于做出来好开心 ^_^

#include <iostream>
#include <algorithm>
#include <cstdio> using namespace std; typedef long long ll; const int N = 100005; struct node {
int val;
int pos;
bool operator < (node a) const
{
return val > a.val;
}
} a[N]; int b[N]; int main()
{
int n;
while (cin >> n)
{
for (int i = 0; i < n; ++i)
{
cin >> a[i].val;
a[i].pos = i;
b[i] = a[i].val;
}
sort(a, a + n);
int l, r;
l = r = a[0].pos;
ll ans = 0;
for (int i = 1; i < n; ++i)
{
//printf("%d %d %d\n", i, l, r);
//printf("%d %d\n", a[i].pos, a[i].val);
if (a[i].pos < r && a[i].pos > l) continue;
if (a[i].pos < l)
{
for (int j = a[i].pos + 1; j < l; ++j)
{
ans += a[i].val - b[j];
//cout << ans << endl;
}
l = a[i].pos;
}
else if (a[i].pos > r)
{
for (int j = r + 1; j < a[i].pos; ++j)
ans += a[i].val - b[j];
r = a[i].pos;
}
}
cout << ans << endl;
}
return 0;
}

  

dut1305 台阶的更多相关文章

  1. jQuery插件开发精品教程,让你的jQuery提升一个台阶

    要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...

  2. JS面试题-算法台阶问题

    有100格台阶,可以跨1步可以跨2步,那么一个有多少种走法: 今天电话面试.遇到一道算法问题,然后瞬间一脸懵逼: 然后机智的我,自作聪明的想到如果一个人每次都走1步,那么最多步,每次走2步最少步:然后 ...

  3. 青蛙跳100级台阶算法,完整可运行,php版本

    /* 算法题目 * 2016年4月11日16:11:08 * 一只青蛙,一次可以跳1步,或者2步,或者3步,现在要跳100级台阶,请问青蛙有多少种上100级台阶的跳法 * 1步的有$n 2步的有$m ...

  4. Swift解算法——台阶问题

    题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级. 求总共有多少总跳法,并分析算法的时间复杂度.   首先对题目进行分析: 台阶一共有n级 因此当n = 1时——只有一种跳法       当 ...

  5. 剑指Offer 变态跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   其实就是斐波那契数列问题. 假设f(n)是n个台阶跳的次数. f(1) = ...

  6. 剑指Offer 跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   解题思路: f(n)=f(n-1)+f(n-2); f(1)=1,f(2)=2;   AC代码 ...

  7. 转:jQuery插件开发精品教程,让你的jQuery提升一个台阶

    要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...

  8. 剑指offer——变态跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 问题分析 由于每次跳的阶数不确定,没有一个固定的规律,但是可以了解的是后一次跳 ...

  9. IT公司100题-27-跳台阶问题

    问题描述: 一个台阶总共有n阶,一次可以跳1级或者2级.求总共有多少种跳法.   分析: 用f(n)表示n阶台阶总共有多少种跳法.n阶台阶,第一可以选择跳1阶或者2阶,则f(n) = f(n-1) + ...

随机推荐

  1. 数据库获取前N条记录SQL Server与SQLite的区别

    在使用sql语句进行前20条记录查询时SQL Server可以这样写: 1: select top 20 * from [table] order by ids desc 2: select top ...

  2. dvd的舞女

    [题目描述] 众所周知,dvd是一个爱做梦的好孩子. 但是不知道为什么最近dvd总是梦到一群舞女 众所周知,dvd是一个爱琢磨的好孩子. 但是不知道为什么dvd最近一直想不明白为什么 终于dvd发现了 ...

  3. Chapter 10 EF 6 Support

    http://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html

  4. C#基础|面向对象之多态

      什么是多态   一句话解释,同一种事物表现出的多种形态. 看完以后,应该还是蒙的,还是看代码吧.. 现有Person类,Student类,Teacher类 其中Person类是Student和Te ...

  5. 问题分享:ActiveX component can't create object: "MSComDlg.CommonDialog"

    问题描述: 修改一个前辈的代码,在我自己电脑上面运行的很好,但是放到要用户电脑(win7 x64)上面却跑不了,报个如题的错误. 查了下是COMDLG32.OCX的问题,用到控件的地方是: Dim o ...

  6. xss攻击入门

    xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意 ...

  7. MUH and Cube Walls

    Codeforces Round #269 (Div. 2) D:http://codeforces.com/problemset/problem/471/D 题意:给定两个序列a ,b, 如果在a中 ...

  8. 修改Tomcat内存大小

    Windows下,在文件/bin/catalina.bat,Linux下,在文件/bin/catalina.sh的前面,增加如下设置: JAVA_OPTS=-Xms[初始化内存大小] -Xmx[可以使 ...

  9. 【原创】MIPS浅议之——中断系统之我见

    最近,准确的说应该是最近两个月的时间,我都在研究MIPS的异常与中断.或者可以说,最近这两个月,我才真正了解中断系统的整个结构和处理流程以及为什么要这样做?这段时间我最大的体会就是以前我们在“计算机组 ...

  10. [Hadoop源码解读](三)MapReduce篇之Job类

    下面,我们只涉及MapReduce 1,而不涉及YARN. 当我们在写MapReduce程序的时候,通常,在main函数里,我们会像下面这样做.建立一个Job对象,设置它的JobName,然后配置输入 ...