Submission #1164390

#TimeUsernameProblemLanguageResultExecution timeMemory
1164390akzytrDifference (POI11_roz)C++20
100 / 100
94 ms2304 KiB
#include <bits/stdc++.h> #define ve vector #define ar array #define pb push_back #define ins insert #define endl '\n' #define ll long long using namespace std; /* Segment tree over most and least occuring character and subtract the least prefix that contains both using a pointer of last occurance. Don't even need seg tree just keep pointer updates of min sum at each point of least character */ int main(){ int N; string s; cin >> N; cin >> s; int mx = 0; int cnt[26]; int aux[26]; int rm[26]; int p[26]; for(char a = 'a'; a <= 'z'; a++){ for(int i = 0; i < 26; i++){ cnt[i] = 0; rm[i] = 0; p[i] = -1; aux[i] = 0; } for(int i = 0; i < N; i++){ if(s[i] == a){ for(int j = 0; j < 26; j++){ cnt[j]++; if(p[j] == -1) continue; mx = max(mx, cnt[j] - rm[j]); aux[j] = min(aux[j], cnt[j]); } } else{ rm[s[i]-'a'] = min(rm[s[i]-'a'], aux[s[i]-'a']); cnt[s[i]-'a']--; p[s[i]-'a'] = i; mx = max(mx, cnt[s[i]-'a']); aux[s[i]-'a'] = min(aux[s[i]-'a'], cnt[s[i]-'a']); } } } cout << mx << endl; }
#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...