Pagini recente » Cod sursa (job #1700078) | Cod sursa (job #1643248) | Cod sursa (job #276903) | Cod sursa (job #891585) | Cod sursa (job #3277315)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("numarare.in");
ofstream fout("numarare.out");
int n, a[100005], s[100005], stg[100005], drp[100005];
long long sol;
int main()
{
int i, j, mini, st, dr;
fin >> n;
for(i = 1;i <= n;i++)
fin >> a[i];
for(i = 2;i <= n;i++)
s[i - 1] = a[i] - a[i - 1];
n--;
stg[1] = drp[n] = 1;
j = 1;
for(i = 2;i <= n;i++)
{
while(a[j] != a[i])
j++;
stg[i] = i - j + 1;
}
j = n;
for(i = n - 1;i >= 1;i--)
{
while(a[j] != a[i])
j--;
drp[i] = j - i + 1;
}
for(i = 1;i <= n;i++)
{
st = dr = i;
while(a[st] == a[dr] && st > 1 && dr < n)
{
mini = min(stg[st], drp[dr]);
st -= mini;
dr += mini;
}
sol += (dr - i + 1);
}
fout << sol << "\n";
fout.close();
return 0;
}