Cod sursa(job #2260478)

Utilizator aurelionutAurel Popa aurelionut Data 15 octombrie 2018 00:49:27
Problema Secventa 5 Scor 0
Compilator cpp-32 Status done
Runda Arhiva de probleme Marime 0.96 kb
#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;
}