Submission #905402
Source Code Expand
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <cassert>
#include <queue>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef long long LL;
typedef pair<int,int> PII;
typedef queue<int> QI;
const LL mod=1000000007;
LL powmod(LL a,LL b) {LL res=1;a%=mod;for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
// head
int n,a[233333];
int l[233333],r[233333];
PII q[233333];
LL ans;
int main(){scanf("%d",&n);rep(i,0,n)scanf("%d",a+i);
int minum=a[0],m=0;l[0]=0;
rep(i,1,n)l[i]=r[i]=i;
memset(q,0,sizeof(q));int head=0,tail=0;
q[tail]=mp(a[0],0);
rep(i,1,n){
while(q[tail].fi>a[i]){
r[q[tail].se]=i;
tail--;
if(tail==-1)break;
}
q[++tail]=mp(a[i],i);
}
while(head<=tail){
r[q[head++].se]=n;
}
memset(q,0,sizeof(q));head=0;tail=0;
q[tail]=mp(a[n-1],n-1);
per(i,0,n-1){
while(q[tail].fi>a[i]){
l[q[tail].se]=i;
tail--;
if(tail==-1)break;
}
q[++tail]=mp(a[i],i);
}
// cout<<"!!!"<<head<<"!!!"<<tail<<endl;
while(head<=tail){
l[q[head++].se]=-1;
}
rep(i,0,n){
// cout<<i<<": "<<l[i]<<' '<<r[i]<<endl;
l[i]=i-l[i];
r[i]=r[i]-i;
// cout<<i<<": "<<l[i]<<' '<<r[i]<<endl;
ans+=(LL)l[i]*(LL)r[i]*(LL)a[i];
}
cout<<ans<<endl;
return 0;
}
Submission Info
Submission Time
2016-10-01 21:26:51+0900
Task
B - Minimum Sum
User
wangzhpp
Language
C++14 (GCC 5.4.1)
Score
400
Code Size
1814 Byte
Status
AC
Exec Time
30 ms
Memory
4480 KB
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:35:26: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
int main(){scanf("%d",&n);rep(i,0,n)scanf("%d",a+i);
^
./Main.cpp:35:52: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
int main(){scanf("%d",&n);rep(i,0,n)scanf("%d",a+i);
^
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
400 / 400
Status
Set Name
Test Cases
Sample
example0, example1, example2
All
corner0, corner1, corner2, corner3, example0, example1, example2, maxrand0, maxrand1, maxrand2, rand0, rand1, rand2
Case Name
Status
Exec Time
Memory
corner0
AC
27 ms
4480 KB
corner1
AC
27 ms
4480 KB
corner2
AC
4 ms
2048 KB
corner3
AC
28 ms
4480 KB
example0
AC
4 ms
2048 KB
example1
AC
4 ms
2048 KB
example2
AC
4 ms
2048 KB
maxrand0
AC
30 ms
4480 KB
maxrand1
AC
30 ms
4480 KB
maxrand2
AC
30 ms
4480 KB
rand0
AC
4 ms
2048 KB
rand1
AC
4 ms
2048 KB
rand2
AC
4 ms
2048 KB