Cod sursa(job #2751755)

Utilizator AndreiCroitoruAndrei Croitoru AndreiCroitoru Data 15 mai 2021 19:00:34
Problema Secventa 5 Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>
using namespace std;
const int N = (1<<20)+1;
unsigned int v[N];

int main()
{

	unordered_map <unsigned int, int> lvec;
	unordered_map <unsigned int, int> uvec;
	ifstream cin("secv5.in");
	ofstream cout("secv5.out");

	int n,u,l;
	cin>>n>>l>>u;
	unsigned int upoint=0;
	unsigned int lpoint=0;

	long long ans=0;

	for(int i=0;i<n;i++)
	{
		cin>>v[i];
		if(lvec.find(v[i])==lvec.end())
			lvec[v[i]]=1;
		else
			lvec[v[i]]++;
		if(uvec.find(v[i])==uvec.end())
			uvec[v[i]]=1;
		else
			uvec[v[i]]++;
		while(lpoint<=i and lvec.size()>=l)
		{
			if(lvec[v[lpoint]]==1)
					lvec.erase(v[lpoint]);
			else
				lvec[v[lpoint]]--;
			lpoint++;
		}
		while(upoint<=i and uvec.size()>u)
		{
			if(uvec[v[upoint]]==1)
				uvec.erase(v[upoint]);
			else
				uvec[v[upoint]]--;
			upoint++;
		}
		if(lpoint>upoint)
			ans+=lpoint-upoint;
	}
	cout<<ans<<'\n';
	return 0;
}