Submission #195613

#TimeUsernameProblemLanguageResultExecution timeMemory
195613stefdascaKralj (COCI16_kralj)C++14
140 / 140
1095 ms56944 KiB
#include<bits/stdc++.h> #define god dimasi5eks #pragma GCC optimize("O3") #define fi first #define se second #define pb push_back #define pf push_front #define mod 1000000007 #define dancila 3.14159265359 #define eps 1e-9 // #define fisier 1 using namespace std; typedef long long ll; int n, rival[500002]; int frq[500002], sp[1000002]; vector<int> enemy[500002]; int skill[500002], skill2[500002]; int ans = 0; set<int> vb; int solve(int st) { int ss = 0; vb.clear(); for(int i = st; i <= st + n - 1; ++i) { int truepos = i; if(truepos > n) truepos -= n; // skill[truepos]; for(int j = 0; j < enemy[truepos].size(); ++j) vb.insert(skill2[enemy[truepos][j]]); if(skill[truepos] > *vb.rbegin()) vb.erase(vb.begin()); else ++ss, vb.erase(vb.lower_bound(skill[truepos])); if(ss + (st + n - 1) - i <= ans) return ss; } return ss; } int main() { #ifdef fisier ifstream f("input.in"); ofstream g("output.out"); #endif ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n; for(int i = 1; i <= n; ++i) cin >> rival[i], ++frq[rival[i]], enemy[rival[i]].pb(i); for(int i = 1; i <= n; ++i) cin >> skill[i]; for(int i = 1; i <= n; ++i) cin >> skill2[i]; deque<int> mn; for(int i = 1; i < 2 * n; ++i) { int truepos = i; if(truepos > n) truepos -= n; sp[i] = sp[i-1] + frq[truepos] - 1; if(i > n && !mn.empty() && mn[0] == i - n) mn.pop_front(); while(!mn.empty() && sp[i] < sp[mn.back()]) mn.pop_back(); mn.pb(i); if(i >= n && sp[mn[0]] >= sp[i - n]) ans = max(ans, solve(i - n + 1)); } cout << ans; return 0; }

Compilation message (stderr)

kralj.cpp: In function 'int solve(int)':
kralj.cpp:38:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j = 0; j < enemy[truepos].size(); ++j)
                        ~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...