fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define faster ios_base::sync_with_stdio(false); cin.tie(NULL)
  4. #define Bit(mask , i) ((mask >> i) & 1)
  5. #define fi first
  6. #define se second
  7. #define _LOG2(nl) 31 - __builtin_clz(nl)
  8. #define c_bit(nl) __builtin_popcount(nl)
  9. #define li pair<long long , int>
  10. #define db double
  11. #define onBit(mask , i) (mask | (1 << i))
  12. #define offBit(mask , i) (mask & (~(1 << i)))
  13.  
  14. const long long MOD = 1e9 + 7;
  15. const long long INF = 1e14;
  16. const int N = 1e5 + 7;
  17. int pre[N] , z[N];
  18. string s;
  19. int n;
  20.  
  21. void inp(){
  22. cin >> s;
  23. n = s.size();
  24. s = "L" + s;
  25. }
  26.  
  27. void solve(){
  28. for (int i = 2 , l = 2 , r = 1 ; i <= n ; ++i){
  29. if (i <= r)
  30. z[i] = min(r - i + 1 , z[i - l + 1]);
  31. while (i + z[i] <= n && s[1 + z[i]] == s[i + z[i]])
  32. ++z[i];
  33. if (i + z[i] - 1 > r){
  34. l = i;
  35. r = i + z[i] - 1;
  36. }
  37. }
  38. for (int i = 1 ; i <= n ; ++i) if (z[i] != 0){
  39. ++pre[1];
  40. --pre[z[i] + 1];
  41. }
  42. for (int i = 1 ; i <= n ; ++i){
  43. pre[i] += pre[i - 1];
  44. cout << pre[i] + 1 << " ";
  45. }
  46. }
  47.  
  48. int main(){
  49. // freopen("xhmax.inp" , "r" , stdin);
  50. // freopen("xhmax.out" , "w" , stdout);
  51. faster;
  52. inp();
  53. solve();
  54. return 0;
  55. }
  56.  
Success #stdin #stdout 0.01s 5316KB
stdin
Standard input is empty
stdout
Standard output is empty