fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long int
  4. #define double long double
  5.  
  6.  
  7. const int M = 1000000007;
  8. const int N = 3e5+9;
  9. const int INF = 2e9+1;
  10. const int MAXN = 100000;
  11. const int LINF = 2000000000000000001;
  12.  
  13. //_ ***************************** START Below *******************************
  14.  
  15.  
  16.  
  17. string a;
  18.  
  19. //* Template1 for Atmost k (i.e. <= k )
  20.  
  21. int consistency1(int n, int k){
  22.  
  23. int s = 0, e = 0;
  24. int ans = 0;
  25. unordered_map<int,int> mp;
  26.  
  27.  
  28. while(e<n){
  29. //* Calculate state
  30. mp[a[e]]++;
  31.  
  32. if(mp.size() <= k){
  33. //* Valid Wndow => Compute Result && expand
  34. ans = max(ans, (e-s+1));
  35. e++;
  36. }
  37. else{
  38. //* Invalid window => Keep Shrink Window
  39. while(s<=e && mp.size() > k){
  40. mp[a[s]]--;
  41. if(mp[a[s]] == 0) mp.erase(a[s]);
  42. s++;
  43. }
  44.  
  45. //* Valid window => Compute Result && expand
  46. ans = max(ans, (e-s+1));
  47. e++;
  48. }
  49. }
  50.  
  51. return ans;
  52. }
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60. //* Template2 for Atmost k (i.e. <= k )
  61. //* (based on Cache Invalidation)
  62.  
  63. int consistency2(int n, int k){
  64.  
  65.  
  66. unordered_map<int,int> mp;
  67. int s=0, e=0;
  68. int ans = 0;
  69.  
  70. while(e<n){
  71.  
  72. //* Calculate state
  73. mp[a[e]]++;
  74.  
  75. //* Invalid window => Shrink
  76. while(s<=e && mp.size()>k){
  77. mp[a[s]]--;
  78. if(mp[a[s]]==0) mp.erase(a[s]);
  79. s++;
  80. }
  81.  
  82. //* Valid window guranteed => Compute Result
  83. ans = max(ans, (e-s+1));
  84.  
  85. e++;
  86. }
  87.  
  88. return ans;
  89.  
  90. }
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114. int practice(int n, int k){
  115.  
  116.  
  117. return 0;
  118. }
  119.  
  120.  
  121.  
  122.  
  123.  
  124. void solve() {
  125.  
  126. int k;
  127. cin >> k;
  128. cin >> a;
  129.  
  130. int n = a.size();
  131.  
  132. cout << consistency1(n, k) << " " << consistency2(n, k) << endl;
  133. // cout << consistency1(n, k) << " -> " << practice(n, k) << endl;
  134.  
  135. }
  136.  
  137.  
  138.  
  139.  
  140.  
  141. int32_t main() {
  142. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  143.  
  144. int t = 1;
  145. cin >> t;
  146. while (t--) {
  147. solve();
  148. }
  149.  
  150. return 0;
  151. }
Success #stdin #stdout 0s 5316KB
stdin
2
2
aababbcaacc
3
abcddefg
stdout
6 6
4 4