1345: [Baltic2007]序列问题Sequence
Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 712 Solved: 365
[ Submit][ Status][ Discuss]
Description
Input
Output
Sample Input
1
2
3
Sample Output
HINT
30%的测试数据 n<=500;
50%的测试数据 n <= 20,000。
解题思路:和bzoj 1113一模一样。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int n;
long long q[1000001];
inline long long read()
{
char y; long long x=0,f=1; y=getchar();
while (y<'0' || y>'9') {if (y=='-') f=-1; y=getchar();}
while (y>='0' && y<='9') {x=x*10+int(y)-48; y=getchar();}
return x*f;
}
int main()
{
n=read(); int tail=0; long long ans=0; q[0]=0x7fffffff;
for (int i=1;i<=n;++i)
{
long long x=read();
if (tail==0)
{
++tail; q[tail]=x;
}else
{
while (tail!=0 && q[tail]<x) {ans+=min(x,q[tail-1]);--tail;}
++tail; q[tail]=x;
}
}
for (int i=tail;i>1;--i) ans+=q[i-1];
printf("%lld",ans);
}