Cod sursa(job #1067251)

Utilizator Robert29FMI Tilica Robert Robert29 Data 26 decembrie 2013 16:52:29
Problema Secventa 5 Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<stdio.h>
#include<unordered_map>
#define dim (1<<20)+1
using namespace std;

unsigned int v[dim];
unordered_map<unsigned int, int> h1, h2;
int main()
{
	FILE*f = fopen("secv5.in", "r");
	int n, min, max;
	fscanf(f, "%d %d %d\n", &n, &min, &max);

	long long sol = 0;
	int p1 = 1, p2 = 1, nr1 = 0, nr2 = 0;
	char w[20];
	for (int i = 1; i <= n; ++i)
	{
		fgets(w, 15, f);
		for (int j = 0; w[j] >= '0'; ++j)
			v[i] = v[i] * 10 + w[j] - '0';
		++h1[v[i]];
		++h2[v[i]];
		if (h1[v[i]]==1)
		{
			++nr1;
			while (nr1 > max)
			{
				--h1[v[p1]];
				if (!h1[v[p1]])
					--nr1;
				++p1;
			}
		}
		if (h2[v[i]] == 1)
		{
			++nr2;
			while (nr2>min)
			{
				--h2[v[p2]];
				if (!h2[v[p2]])
					--nr2;
				++p2;
			}
		}

		while (h2[v[p2]] > 1)
		{
			--h2[v[p2]];
			++p2;
		}

		if (nr2 >= min)
			sol += p2 - p1 + 1;
	}
	fclose(f);

	FILE*g = fopen("secv5.out", "w");
	fprintf(g, "%lld", sol);
	fclose(g);

	return 0;
}