Pagini recente » Cod sursa (job #418192) | Cod sursa (job #2590532) | Cod sursa (job #2829029) | Cod sursa (job #644403) | Cod sursa (job #3133244)
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <set>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
unsigned 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++;
if ( nr > val )
{
ans += ((1ll * (i - j) * (i - j + 1)) >> 1) - ( int )(last != -1) * ((1ll * (last - j) * (last - j + 1)) >> 1);
last = i;
while ( nr > val )
{
if ( --umap[a[j]] == 0 ) nr--;
j++;
}
}
}
ans += ((1ll * (n + 1 - j) * (n + 1 - j + 1)) >> 1) - ( int )(last != -1) * ((1ll * (last - j) * (last - j + 1)) >> 1);
return ans;
}
int main()
{
fin.tie();
fout.tie();
fin >> n >> l >> u;
for ( int i = 1; i <= n; i++ )
fin >> a[i];
fout << Count(u) - Count(l - 1);
}