Pagini recente » Cod sursa (job #1019739) | Cod sursa (job #42049) | Cod sursa (job #930721) | Cod sursa (job #995917) | Cod sursa (job #2260478)
#include <fstream>
#include <deque>
#include <vector>
using namespace std;
const int NMAX = (1 << 20) + 10;
int n, l, u;
vector <pair <unsigned int, int> > v;
deque <int> dq;
unsigned int a[NMAX];
int main()
{
ifstream fin("secv5.in");
ofstream fout("secv5.out");
fin >> n >> l >> u;
for (int i = 1;i <= n;++i)
fin >> a[i];
if (n == 1)
v.push_back(make_pair(a[1], 1));
else
{
int cnt = 1;
for (int i = 2;i <= n + 1;++i)
{
if (a[i] == a[i - 1])
++cnt;
else
{
v.push_back(make_pair(a[i - 1], cnt));
cnt = 1;
}
}
}
long long ans = 0;
int add = 0;
for (int i = 0;i < v.size();++i)
{
dq.push_back(v[i].second);
if (l == 1)
ans = 1LL * ans + dq.back();
if (dq.size() > u)
{
add -= dq.front();
dq.pop_front();
}
if (dq.size() >= l)
ans = 1LL * ans + 1LL * dq.back() * add;
add += dq.back();
}
fout << ans << "\n";
fin.close();
fout.close();
return 0;
}