Submission #1002300

#TimeUsernameProblemLanguageResultExecution timeMemory
1002300votranngocvyDifference (POI11_roz)C++14
100 / 100
627 ms18260 KiB
#include <bits/stdc++.h> using namespace std; #define NAME "task" const int N = 1e6 + 5; const int inf = 0x3f3f3f3f; vector<int>pos[30]; int n,ans,Min[N]; char s[N]; void calc(int a,int b) { vector<int>vec; int i = 0,j = 0; while (i < (int)pos[a].size() && j < (int)pos[b].size()) { if (pos[a][i] < pos[b][j]) { vec.push_back(1); i++; } else { vec.push_back(-1); j++; } } while (i < (int)pos[a].size()) { vec.push_back(1); i++; } while (j < (int)pos[b].size()) { vec.push_back(-1); j++; } int m = (int)vec.size(); Min[0] = 0; int sum = 0; int last = -1; for (int i = 1; i <= m; i++) { if (vec[i - 1] == -1) last = i - 1; sum += vec[i - 1]; if (last != -1) ans = max(ans,sum - Min[last]); Min[i] = min(Min[i - 1],sum); } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen(NAME".inp","r",stdin); //freopen(NAME".out","w",stdout); cin >> n; for (int i = 1; i <= n; i++) { cin >> s[i]; pos[s[i] - 'a'].push_back(i); } for (int i = 0; i < 26; i++) for (int j = 0; j < 26; j++) if (i != j && pos[i].size() && pos[j].size()) calc(i,j); cout << ans << "\n"; }
#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...