#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
cin.tie(0);
ios_base::sync_with_stdio(0);
ll n;
cin>>n;
ll prev = 0;
ll tot = 0;
stack<pair<ll,ll>> s; //index, time
ll val;
for (ll i = 0; i<n; i++){
cin>>val;
if (val<prev){
continue;
} else {
prev=val;
}
ll ind = i;
tot+=(n-ind)*val;
while (s.size()>0){
auto f = s.top();
ll tind = f.first;
ll th = f.second;
//cout<<tind<<' '<<th<<'\n';
//can we do better by popping?
if ((n-ind)*val+(n-tind)*th>(n-tind)*val){
//cout<<"subtract\n";
tot-=(n-ind)*val+(n-tind)*th;
//cout<<tot<<'\n';
tot+=(n-tind)*val;
//cout<<tot<<'\n';
ind=tind;
s.pop();
} else {
break;
}
}
//cout<<i<<": "<<tot<<'\n';
s.push({ind,val});
}
cout<<tot<<'\n';
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Incorrect |
1 ms |
384 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
384 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
384 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
118 ms |
784 KB |
Output is correct |
2 |
Correct |
117 ms |
868 KB |
Output is correct |
3 |
Correct |
128 ms |
760 KB |
Output is correct |
4 |
Correct |
123 ms |
888 KB |
Output is correct |
5 |
Correct |
125 ms |
760 KB |
Output is correct |
6 |
Correct |
128 ms |
872 KB |
Output is correct |
7 |
Correct |
123 ms |
888 KB |
Output is correct |
8 |
Correct |
106 ms |
1016 KB |
Output is correct |
9 |
Correct |
106 ms |
888 KB |
Output is correct |
10 |
Correct |
135 ms |
888 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Incorrect |
1 ms |
384 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Incorrect |
1 ms |
384 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |