Pagini recente » Cod sursa (job #971592) | Diferente pentru template/despre-infoarena intre reviziile 14 si 13 | Monitorul de evaluare | Cod sursa (job #821514) | Cod sursa (job #2017115)
#include<fstream>
using namespace std;
ifstream fin("numarare.in");
ofstream fout("numarare.out");
int v[200005], k, D[200005], n, R, C;
long long sol = 0;
int main(){
fin >> n;
k = 0;
for( int i = 1; i <= n; i++ ){
int x;
fin >> x;
v[++k] = x;
v[++k] = 0;
}
v[0] = -200000;
v[k] = -200000;
n = k - 1;
C = R = 0;
for( int i = 2; i <= n; i += 2 ){
int mirr_poz = C * 2 - i;
D[i] = 2;
int s = v[i - 1] + v[i + 1];
int st = i - 1;
int dr = i + 1;
if( i <= R )
D[i] = min( D[mirr_poz], R - i + 1 );
while( st - 2 >= 1 && dr + 2 <= n && v[st - 2] + v[dr + 2] == s ){
st -= 2;
dr += 2;
D[i] += 2;
}
if( dr > R ){
C = i;
R = dr;
}
sol += D[i] / 2;
}
fout << sol << "\n";
return 0;
}