Pagini recente » Cod sursa (job #3274835) | Cod sursa (job #351099) | Cod sursa (job #2501026) | Cod sursa (job #2972542) | Cod sursa (job #2948308)
#include <iostream>
#include <fstream>
#include <unordered_map>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
int n, u, l, a[(1 << 20) + 5];
long long Count(int val)
{
if ( val == 0 ) return 0;
int j = 1, nr = 0, last = -1;
long long ans = 0;
unordered_map<unsigned int, int> umap;
for ( int i = 1; i <= n; i++ )
{
if ( umap[a[i]] == 0 ) nr++;
++umap[a[i]];
if ( nr > val )
{
//cout << i << " " << j << " " << 1ll * (i - j) * (i - j + 1) / 2 - ( int )(last != -1) * 1ll * (last - j) * (last - j + 1) / 2 << endl;
ans += 1ll * (i - j) * (i - j + 1) / 2 - ( int )(last != -1) * 1ll * (last - j) * (last - j + 1) / 2;
last = i;
while ( j < i && nr > val )
{
--umap[a[j]];
if ( umap[a[j]] == 0 ) nr--;
j++;
}
}
}
//cout << n + 1 << " " << j << " " << 1ll * (n + 1 - j) * (n + 1 - j + 1) / 2 - ( int )(last != -1) * 1ll * (last - j) * (last - j + 1) / 2 << endl;
ans += 1ll * (n + 1 - j) * (n + 1 - j + 1) / 2 - ( int )(last != -1) * 1ll * (last - j) * (last - j + 1) / 2;
return ans;
}
int main()
{
fin >> n >> l >> u;
for ( int i = 1; i <= n; i++ )
fin >> a[i];
fout << Count(u) - Count(l - 1);
}