Cod sursa(job #2875923)

Utilizator bem.andreiIceman bem.andrei Data 22 martie 2022 17:44:22
Problema Secventa 5 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <bits/stdc++.h>

using namespace std;
ifstream r("secv5.in");
ofstream w("secv5.out");

unordered_map <long long, long long > mp;
const int N=(1<<20)+1;
long long v[N],n;
long long f[N];
long long rez(long long d)
{
    long long ans=0;
    if(d==0){
	   	return ans;
    }
    memset(f, 0, sizeof(f));
    long long cnt=0, st=1;
    for(long long dr=1;dr<=n;++dr)
    {
        if(f[v[dr]]==0){
            cnt++;
        }
        f[v[dr]]++;
        if(cnt<=d){
			ans+=(dr-st+1);
        }
        else
        {
            while(cnt>d)
            {
                f[v[st]]--;
                if(f[v[st]]==0){
				   cnt--;
                }
                st++;
            }
            ans+=(dr-st+1);
        }
    }
    return ans;
}
int main()
{
	long long l,u;
	r>>n>>l>>u;
	long long cnt=0;
	for(long long i=1;i<=n;i++)
	{
		r>>v[i];
		if(mp[v[i]]==0)
		{
			mp[v[i]]=++cnt;
			v[i]=cnt;
		}
		else{
			v[i]=mp[v[i]];
		}
	}
	mp.clear();
	w<<rez(u)-rez(l-1);
	return 0;
}