ArcTan

dfs
随笔 - 16, 文章 - 117, 评论 - 6, 引用 - 0
数据加载中……

poj 2796(单调栈-连续和最大)

这个水题又加深了点对单调栈的认识了。不能浅尝辄止!

这个不是special judge么?
总结:以后读题要读清楚,理解明白,不能有歧义啊!
#include<stdio.h>
#include
<string.h>
#include
<math.h>
int pos[100005],n;
long long stack[100005],sum[100005];
int main()
{
    
int i,s,t,top;
    
long long a,ans;
    
while (scanf("%d",&n)==1)
    {
        top
=0;stack[0]=0;pos[0]=0;sum[0]=0;
        ans
=0;s=t=0;
        
for (i=1;i<=n ;i++ )
        {
            scanf(
"%I64d",&a);
            sum[i]
=sum[i-1]+a;
            
while (top&&a<=stack[top])
            {
                
if (ans<(sum[i-1]-sum[pos[top-1]])*stack[top])
                {
                    ans
=(sum[i-1]-sum[pos[top-1]])*stack[top];
                    s
=pos[top-1]+1;t=i-1;
                }
                top
--;
            }
            top
++;
            stack[top]
=a;
            pos[top]
=i;
        }
        
while (top)
        {
            
if (ans<=(sum[n]-sum[pos[top-1]])*stack[top])  //这里是<=才过的,不是special judge么?怎么回事呢,得好好看懂题目啊!
            {
                ans
=(sum[n]-sum[pos[top-1]])*stack[top];
                s
=pos[top-1]+1;t=n;
            }
            top
--;
        }
        printf(
"%I64d\n%d %d\n",ans,s,t);
    }
    
return 0;
}

突然发现自己喜欢写单调栈了,呵呵,这个专题好东西。
感谢sdu的奇奇神提供练习专题!!!ORZ


posted on 2012-04-24 16:53 wangs 阅读(1329) 评论(0)  编辑 收藏 引用 所属分类: ACM-数据结构


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理