Submission #6108

#TimeUsernameProblemLanguageResultExecution timeMemory
6108kriii즐거운 채소 기르기 (JOI14_growing)C++98
0 / 100
8 ms4756 KiB
#include <stdio.h> #include <stack> using namespace std; int N,D[300030],L[300030],R[300030]; stack<pair<int, int> > S; int lf; int main() { scanf ("%d",&N); for (int i=0;i<N;i++) scanf ("%d",&D[i]); for (int i=0;i<N;i++){ while (!S.empty() && S.top().first < D[i]){ lf -= S.top().second; S.pop(); } L[i] = lf; if (!S.empty() && S.top().first == D[i]){ L[i] -= S.top().second; S.top().second++; } else S.push(make_pair(D[i],1)); lf++; } while (!S.empty()) S.pop(); lf = 0; for (int i=N-1;i>=0;i--){ while (!S.empty() && S.top().first < D[i]){ lf -= S.top().second; S.pop(); } R[i] = lf; if (!S.empty() && S.top().first == D[i]){ R[i] -= S.top().second; S.top().second++; } else S.push(make_pair(D[i],1)); lf++; } long long ans = 0; for (int i=0;i<N;i++) ans += L[i] < R[i] ? L[i] : R[i]; printf ("%lld\n",ans); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...