VJ题目链接

题意:

n个数,求区间[l,r] 使得 sum[l,r]*min(a[l],a[l+1],...,a[r]) 最大。若有多种答案,输出区间最短的。若还有多组,输出最先出现的。

思路:

求出a[i]为最小数时,最大的区间范围,即求a[i]的最左边的小于a[i]的位置,最右边的位置。

坑点:

因为要最小长度区间,当最小数是0的时候,就出现了巨大的坑点……所以特判。

代码:

#include <cstdio>
#include <cstring>
#include <cstdlib> #define N 100010 int a[N];
int l[N], r[N];
long long sum[N];
int n;
int stk[N]; void getl() {
int top = ;
for (int i = ; i <= n; i++) {
while (top > && a[stk[top-]] >= a[i]) top--;
stk[top++] = i;
if (top == ) l[i] = ;
else l[i] = stk[top-];
}
} void getr() {
int top = ;
for (int i = n; i > ; i--) {
while (top > && a[stk[top-]] >= a[i]) top--;
stk[top++] = i;
if (top == ) r[i] = n+;
else r[i] = stk[top-];
}
} int main() {
int isfirst = ;
while (scanf("%d", &n) != EOF) {
if (isfirst++) puts("");
//!isfirst++?:puts("");
sum[] = ;
for (int i = ; i <= n; i++) {
scanf("%d", &a[i]);
sum[i] = a[i] + sum[i-];
}
sum[n+] = sum[n]; getl();
getr(); long long ans = -;
int lans, rans;
for (int i = ; i <= n; i++) {
long long now = (sum[r[i]-]-sum[l[i]])*a[i];
if (ans < now) {
ans = now;
lans = l[i]+;
rans = r[i]-; //This is a Great 坑
if (ans == ) {
lans = i;
rans = i;
}
//The Great 坑 End } else if (ans == now) {
if (rans-lans+ > r[i]-l[i]-) {
lans = l[i]+;
rans = r[i]-;
}
}
} printf("%lld\n",ans);
printf("%d %d\n", lans, rans);
}
return ;
}

UVALive 3517:Feel Good(单调栈 Grade C)的更多相关文章

  1. UVALive 6531 Go up the ultras 单调栈+RMQ

    题目链接:点击打开链接 题意: 给定n座山 以下n个数字表示n座山的高度 若这座山u合法,则要满足: 1.若u的左边存在比u高的山,设v是u左边距离u近期的且严格比u高的山,在[v,u]之间至少有一座 ...

  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. UVA - 10213 How Many Pieces of Land?(欧拉公式 + 高精度)

    圆上有n个点,位置不确定.问这些点两两连接成的线段,最多可以把圆划分成多少块平面? 欧拉公式:V-E+F = 2,V是点数,E是边数,F是面数. 答案是F=C(n,4)+C(n,2)+1,看的别人推的 ...

  2. Codeforces Round #461 (Div. 2) C. Cave Painting

    C. Cave Painting time limit per test 1 second memory limit per test 256 megabytes Problem Descriptio ...

  3. Codeforces Round #461 (Div. 2) A. Cloning Toys

    A. Cloning Toys time limit per test 1 second memory limit per test 256 megabytes Problem Description ...

  4. dfs 的全排列

    #include <iostream> #include <algorithm> #include <cstdio> #include <string> ...

  5. go经典练习题涉及流程控制-字符串-struct-map的数据类型的处理

    one:求1到100之间的质数 package main import ( "fmt" ) func isPrime(n int) bool { var flag = true f ...

  6. BugKu-图穷匕见

    拿到图片后,先放到winhex,看看文件头是不是和jpg匹配,看看文件尾,不是FFD9 ,说明后边肯定是藏了什么东西. 顺便找一下文件尾有没有flag(估计是签到题目才会这样吧). binwalk跑一 ...

  7. c#之线程同步--轻量级同步 Interlocked

    轻量级同步 Interlock 为什么说它是轻量级呢?因为它仅对整形数据(即int类型,long也行)进行同步. 如果你学过操作系统里面的PV操作(即信号量),那么你对它已经了解了一般.它实现的正是如 ...

  8. Python 操作 SQLite 数据库

    写在之前 SQLite 是一个小型的关系型数据库,它最大的特点在于不需要单独的服务.零配置.我们在之前讲过的两个数据库,不管是 MySQL 还是 MongoDB,都需要我们安装.安装之后,然后运行起来 ...

  9. OV7725学习之SCCB协议(一)

    OV7725摄像头只能作为从机,通过SCCB协议配置内置的172个寄存器.因此首先要了解的就是SCCB总线 1.SCCB协议简述 SCCB协议有两线也有三线,两线为SIO_C与SIO_D,三线为SIO ...

  10. 微信小程序--问题汇总及详解之form表单

    附上微信小程序开发文档链接:https://mp.weixin.qq.com/debug/wxadoc/dev/framework/MINA.html form表单: 当点击 <form/> ...