제출 #1206818

#제출 시각아이디문제언어결과실행 시간메모리
1206818thangdzwinioiReal Mountains (CCO23_day1problem2)C++20
16 / 25
5093 ms20020 KiB
#include <bits/stdc++.h> using namespace std; const int MAX = 1e6 + 5; const int mod = 1e6 + 3; const int inf = 1e9 + 1; int n, h[MAX], pref[MAX], suff[MAX], tar[MAX]; vector <int> ord; int sr(int l, int r){ return 1ll * (l + r) * (r - l + 1) / 2 % mod; } int mul(int a, int b){ return 1ll * a * b % mod; } void add(int &a, int b){ a += b; if (a >= mod) a -= mod; } void process(){ cin >> n; for (int i = 1; i <= n; ++ i) { cin >> h[i]; ord.push_back(h[i]); } for (int i = 1; i <= n; ++ i) pref[i] = max(pref[i - 1], h[i]); for (int i = n; i >= 1; -- i) suff[i] = max(suff[i + 1], h[i]); int ans = 0; for (int i = 1; i <= n; ++ i){ tar[i] = min(pref[i], suff[i]); add(ans, sr(h[i], tar[i] - 1)); //cout << tar[i] << " "; } //cout << "\n"; //cout << ans << "\n"; sort(ord.begin(), ord.end()); ord.erase(unique(ord.begin(), ord.end()), ord.end()); int last = 0; for (int height : ord){ int ok = 0, Min = inf, cnt = 0; for (int i = 1; i <= n; ++ i) { if (tar[i] >= height && h[i] < height){ if (!ok) add(ans, mul(Min, height - last)); else add(ans, sr(last + 1, height)); ok = 1; ++ cnt; } if (h[i] >= height) Min = min(Min, h[i]); } ok = 0, Min = inf; for (int i = n; i >= 1; -- i) { if (tar[i] >= height && h[i] < height){ if (!ok) add(ans, mul(Min, height - last)); else add(ans, sr(last + 1, height)); ok = 1; } if (h[i] >= height) Min = min(Min, h[i]); } if (cnt >= 2){ add(ans, mod - sr(last + 1, height)); add(ans, mul(Min, height - last)); } last = height; } cout << ans; } int main(){ //freopen("chill.inp", "r", stdin); //freopen("chill.ans", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); process(); 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...