Untitled
unknown
plain_text
3 years ago
1.8 kB
1
Indexable
#include<bits/stdc++.h> #include<algorithm> #define spd_emergency ios_base::sync_with_stdio(false);cin.tie(NULL); #define ll long long #define ull unsigned long long #define mp make_pair #define ff first #define ss second #define mloop(i) for(auto i=m.begin();i!=m.end();i++) #define pb push_back #define pll pair<ll,ll> #define pii pair<int,int> #define mod1 1125899906842597LL using namespace std; vector<bool> prime(200002,true); void seive(ll mx) { prime[0]=prime[1]=false; for(ll i=2;i*i<=mx;i++) { if(prime[i]) { for(ll j=i*i;j<=mx;j+=i) { prime[j]=false; } } } } const ll M = 1e9+7; const ll Mxn = 3e5; ll power(ll i,ll p) { ll ans=1; while(p) { if(p & 1) ans = (ans*i)%M; i = (i*i)%M; p/=2; } return ans%M; } vector<ll> z_function(vector<ll> s) { ll n = (ll) s.size(); vector<ll> z(n); for (ll i = 1, l = 0, r = 0; i < n; ++i) { if (i <= r) z[i] = min (r - i + 1, z[i - l]); while (i + z[i] < n && s[z[i]] == s[i + z[i]]) ++z[i]; if (i + z[i] - 1 > r) l = i, r = i + z[i] - 1; } return z; } int main() { ll t=1, sum=0; while(t--) { ll n,ans=LLONG_MIN; cin>>n; assert(n>=1 && n<=200000); //sum+=n; vector<ll> a(n), pref(n+1,0); for(ll i=0;i<n;i++) { cin>>a[i]; assert(a[i]>=-1000000000 && a[i]<=1000000000); pref[i+1] = pref[i]+a[i]; } vector<ll> z = z_function(a); for(ll i=0;i<n;i++) { if(z[i]+i == n) { ans = max(ans, pref[z[i]]); } } cout<<max(ans, pref[n])<<endl; } return 0; }
Editor is loading...