# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
285021 | mosiashvililuka | Discharging (NOI20_discharging) | C++14 | 219 ms | 39800 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
int a,b,c,d,e,i,j,ii,jj,zx,xc,f[1000009],mx,rg[1000009];
long long dp[1000009];
multiset <long long> s;
multiset <long long>::iterator it;
vector <long long> v[1000009];
stack <int> st;
int main(){
//ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
scanf("%d",&a);
scanf("\n");
for(i=1; i<=a; i++) scanf("%d",&f[i]);
mx=0;
for(i=1; i<=a; i++){
if(mx<f[i]) mx=f[i];
dp[i]=mx*a;
while(st.size()>0&&f[st.top()+1]<=f[i]){
//zx=dp[st.top()]+(f[i]-f[st.top()+1])*(a-st.top());
zx=dp[st.top()]+f[i]*(a-st.top());
if(dp[i]>zx) dp[i]=zx;
st.pop();
}
if(st.size()>0){
zx=dp[st.top()]+f[st.top()+1]*(a-st.top());
if(dp[i]>zx) dp[i]=zx;
}
if(dp[i]>dp[i-1]+f[i]*(a-i+1)) dp[i]=dp[i-1]+f[i]*(a-i+1);
//cout<<dp[i]<<endl;
st.push(i-1);
}
cout<<dp[a];
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |