Submission #979357

#TimeUsernameProblemLanguageResultExecution timeMemory
979357MilosMilutinovicDifference (POI11_roz)C++14
100 / 100
958 ms14568 KiB
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; string s; cin >> s; const int A = 26; vector<vector<int>> pos(A); for (int i = 0; i < n; i++) { pos[(int) (s[i] - 'a')].push_back(i); } int ans = 0; for (int i = 0; i < A; i++) { if (pos[i].empty()) { continue; } for (int j = 0; j < A; j++) { if (pos[j].empty()) { continue; } vector<int> a; int pi = 0, pj = 0; while (pi < (int) pos[i].size() || pj < (int) pos[j].size()) { if (pi == (int) pos[i].size()) { a.push_back(-1); pj += 1; } else if (pj == (int) pos[j].size()) { a.push_back(1); pi += 1; } else if (pos[i][pi] < pos[j][pj]) { a.push_back(1); pi += 1; } else { a.push_back(-1); pj += 1; } } int sz = (int) a.size(); vector<int> pref(sz + 1); for (int p = 0; p < sz; p++) { pref[p + 1] = pref[p] + a[p]; } int mn = (int) 1e9; vector<int> lst(2, -1); int ptr = 0; for (int p = 1; p <= sz; p++) { lst[a[p - 1] == 1 ? 1 : 0] = p; while (ptr < min(lst[0], lst[1])) { mn = min(mn, pref[ptr]); ptr += 1; } ans = max(ans, pref[p] - mn); } } } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...