Pagini recente » Cod sursa (job #2281628) | Cod sursa (job #2435060) | Cod sursa (job #1120051) | Cod sursa (job #1816561) | Cod sursa (job #2948314)
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <set>
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<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];
set<int> s(a + 1, a + 1 + n);
unordered_map<long long int, int> umap;
int cnt = 0;
for ( int a : s )
umap[a] = ++cnt;
for ( int i = 1; i <= n; i++ )
a[i] = umap[a[i]];
fout << Count(u) - Count(l - 1);
}