Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
Register

## 做恶心了 帮帮看看哪里错了

Posted by leon_L at 2009-07-29 10:26:14 on Problem 2559
```#include <iostream>
#include <stack>
using namespace std;

__int64 sum[100010],a[100010],b[100010],top,e,d[100010];

int main()
{
stack<__int64> intstack;
stack<__int64> intstack2;
__int64 max;
int i,j,len,l,n;
while(cin>>n)
{
if(n==0)
break;

scanf("%I64d",&a[0]);
intstack.push(a[0]);
b[0]=0;
intstack2.push(b[0]);
for(i=1;i<n;i++)
{
scanf("%I64d",&a[i]);
len=intstack.size()-1;
l=0;
for(j=len;j>=0;j--)
{
if(intstack.empty())
{
intstack.push(a[i]);
b[i]=0;
intstack2.push(b[i]);
}
else if(a[i]<=intstack.top())
{
l=1;
b[i]=intstack2.top();
top=intstack2.top();
intstack.pop();
intstack2.pop();

if(intstack.empty())
{
intstack.push(a[i]);
intstack2.push(b[i]);
}

}
else
{
if(l==0)
{
b[i]=i;
intstack.push(a[i]);
intstack2.push(b[i]);
}
else
{
b[i]=top;
intstack.push(a[i]);
intstack2.push(top);
}
}
}
}

for(i=intstack.size()-1;i>=0;i--)
intstack.pop();
for(i=intstack.size()-1;i>=0;i--)
intstack.pop();

intstack.push(a[n-1]);
d[n-1]=n-1;
intstack2.push(d[n-1]);
max=sum[n-1]=(d[n-1]-b[n-1]+1)*a[n-1];
for(i=n-2;i>=0;i--)
{
len=intstack.size()-1;
l=0;
for(j=len;j>=0;j--)
{
if(intstack.empty())
{
intstack.push(a[i]);
d[i]=0;
intstack2.push(d[i]);
}
else if(a[i]<=intstack.top())
{
l=1;
d[i]=intstack2.top();
top=intstack2.top();
intstack.pop();
intstack2.pop();
if(intstack.empty())
{
intstack.push(a[i]);
intstack2.push(d[i]);
}

}
else
{
if(l==0)
{
d[i]=i;
intstack.push(a[i]);
intstack2.push(d[i]);
}
else
{
d[i]=top;
intstack.push(a[i]);
intstack2.push(top);
}
}
}
sum[i]=(d[i]-b[i]+1)*a[i];
if(sum[i]>=max)
max=sum[i];
}
printf("%I64d\n",max);
}
return 0;
}

```

Followed by: