Cod sursa(job #2412288)

Utilizator mihneacazCazacu Mihnea mihneacaz Data 21 aprilie 2019 22:17:04
Problema Numarare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
#include <cmath>

const int NMAX=100005;

using namespace std;

int v[NMAX];
int pref[NMAX];

ifstream cin ("numarare.in");
ofstream cout ("numarare.out");

int main() {
    int n;
    cin>>n;
    for(int i=1; i<=n; ++i)
        cin>>v[i];
    int r=0,c=0;
    long long sol=n-1;
    for(int i=1; i<n; ++i) {
        if(i>r) {
            while(i-pref[i]>0 && i+pref[i]+1<=n && v[i+pref[i]+1]+v[i-pref[i]]==v[i]+v[i+1])
                ++pref[i];
        }
        else {
            int leftover=min(pref[2*c-i],r-i);
            pref[i]=leftover;
            while(i-pref[i]>0 && i+pref[i]+1<=n && v[i+pref[i]+1]+v[i-pref[i]]==v[i]+v[i+1])
                ++pref[i];
        }
        --pref[i];
        if(i+pref[i]+1>r) {
            r=i+pref[i]+1;
            c=i;
        }
        sol+=pref[i];
    }
    cout<<sol<<'\n';
    return 0;
}