Submission #795448

#TimeUsernameProblemLanguageResultExecution timeMemory
795448lohachoReal Mountains (CCO23_day1problem2)C++14
12 / 25
5031 ms31648 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3") #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #define int long long using namespace std; const int mod = (int)1e6 + 3; signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<int> a(n), srt(n); for(int i = 0; i < n; ++i){ cin >> a[i]; srt[i] = a[i]; } sort(srt.begin(), srt.end()); srt.erase(unique(srt.begin(), srt.end()), srt.end()); int ans = 0; for(int i = 0; i + 1 < (int)srt.size(); ++i){ vector<int> lmn(n, -1), rmn(n, -1); set<int> st; for(int j = 0; j < n; ++j){ auto p = st.lower_bound(a[j] + 1); if(p != st.end()){ lmn[j] = *p; } st.insert(a[j]); } st.clear(); for(int j = n - 1; j >= 0; --j){ auto p = st.lower_bound(a[j] + 1); if(p != st.end()){ rmn[j] = *p; } st.insert(a[j]); } int cnt = 0; int mn = -1, mx = n; for(int j = 0; j < n; ++j){ if(lmn[j] != -1 && rmn[j] != -1 && a[j] == srt[i]){ if(mn == -1) mn = j; mx = j; ++cnt; a[j] = srt[i + 1]; } } if(cnt){ if(cnt == 1){ (ans += (lmn[mn] + rmn[mn]) * (srt[i + 1] - srt[i]) % mod) %= mod; assert(ans >= 0 && ans < mod);} else{ (ans += (lmn[mn] + rmn[mx] + min(rmn[mn], lmn[mx])) * (srt[i + 1] - srt[i]) % mod + (srt[i] + srt[i + 1] + 1) * (srt[i + 1] - srt[i]) / 2 % mod * (cnt * 2 - 3) % mod) %= mod; assert(ans >= 0 && ans < mod); } assert(ans >= 0 && ans < mod); (ans += cnt * ((srt[i] + srt[i + 1] - 1) * (srt[i + 1] - srt[i]) / 2 % mod) % mod) %= mod; // cout << fir << ' ' << lst << ' ' << cnt << ' ' << ans << endl; } assert(ans >= 0 && ans < mod); } cout << ans << '\n'; 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...