Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 3 * 100005;
- int n,z[N],a[N];
- priority_queue<int, vector<int>, greater<int>> qu;
- int main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(0);cout.tie(0);
- freopen("divseq.inp","r",stdin);
- cin >> n;
- for(int i=1; i<=n; ++i) {
- cin >> a[i];
- }
- z[1]=0;
- for(int k=2, r=1, l=1; k<=n; ++k) {
- int x=0;
- int kk = k-l+1;
- if (k <= r) x = min(z[kk],r-k+1);
- while (a[x+1] == a[x+k] && k + x <= n) ++x;
- z[k] = x;
- if (r < k + x - 1) {
- l = k;
- r = k + x - 1;
- }
- }
- for(int i=1; i<=n; ++i) {
- if (z[i+1] + i == n) qu.push(i);
- cout << z[i] << " ";
- }
- cout << qu.top();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement