Submission #116928

#TimeUsernameProblemLanguageResultExecution timeMemory
116928souhhcongDoktor (COCI17_doktor)C++14
90 / 100
863 ms68656 KiB
#include <iostream> #include <vector> #include <algorithm> #include <map> using namespace std; #define st first #define nd second const int N = 5e5+5; int n, a[N]; int center[N]; int pref[N]; vector<pair<int,int>> seg[2*N]; int mx = -N; pair<int,int> ans; int cnt = 0; map<pair<int,int>,int> check; int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; if (a[i] == i) cnt++; pref[i] = cnt; center[i] = a[i]+i; if (a[i] < i) seg[center[i]].push_back({a[i],i}); else seg[center[i]].push_back({i,a[i]}); } for (int i = 1; i <= 2*n; i++) { if (seg[i].size() == 0) continue; int tmp = 0; tmp++; if (!check[{seg[i][0].st,seg[i][0].nd}]) { tmp -= (pref[seg[i][0].nd] - pref[seg[i][0].st-1]); check[{seg[i][0].st,seg[i][0].nd}] = 1; } if (tmp > mx) { mx = tmp; ans = seg[i][0]; } sort(seg[i].begin(),seg[i].end(), greater<pair<int,int> >() ); for (int j = 1; j < seg[i].size(); j++) { int l = seg[i][j-1].st, r = seg[i][j-1].nd, L = seg[i][j].st, R = seg[i][j].nd; tmp++; if (!check[{L,R}]) { tmp -= (pref[l-1] - pref[L-1] + pref[R] - pref[r]); check[{L,R}] = 1; } if (tmp > mx) { mx = tmp; ans = seg[i][j]; } } } cout << a[ans.st] << ' ' << a[ans.nd]; }

Compilation message (stderr)

doktor.cpp: In function 'int main()':
doktor.cpp:51:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j = 1; j < seg[i].size(); j++)
                         ~~^~~~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...