Cod sursa(job #2443158)

Utilizator florin_salamFlorin Salam florin_salam Data 26 iulie 2019 18:29:16
Problema Secventa 5 Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <unordered_map>
#define limit 100000
#define ch buffer[position]
#define Next (++position == limit) ? (fin.read(buffer, limit), position = 0) : 0

using namespace std;

const int NMAX = (1 << 20) + 10;
char buffer[limit];
unsigned int n, l, u, position;
unsigned int v[NMAX];

ifstream fin("secv5.in");
ofstream fout("secv5.out");

void Read(unsigned int &x)
{
    for (;!('0' <= ch && ch <= '9');Next);
    for(x = 0;('0' <= ch && ch <= '9');x = x * 10 + (ch - '0'), Next);
}

long long Solve(const int &k)
{
	long long ret = 0;
	unordered_map <unsigned int, int> mp;
	for (int i = 1, j = 1;j <= n;++j)
	{
		mp[v[j]]++;
		while (mp.size() > k)
		{
			mp[v[i]]--;
			if (mp[v[i]] == 0)
				mp.erase(v[i]);
			++i;
		}
		ret = 1LL * ret + j - i + 1;
	}
	return ret;
}

int main()
{
	Read(n);
	Read(l);
	Read(u);
	for (int i = 1;i <= n;++i)
		Read(v[i]);
	fout << Solve(u) - Solve(l - 1) << "\n";
	fin.close();
	fout.close();
	return 0;
}