Pagini recente » Cod sursa (job #13542) | Cod sursa (job #836426) | Cod sursa (job #3286007) | Cod sursa (job #2192579) | Cod sursa (job #1713918)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
const int P = 666013, nmax = (1 << 21);
int N,L,U;
unsigned int a[nmax];
vector < pair < unsigned int, int > > h[P+5];
void Add(unsigned int x, unsigned int &k)
{
int r;
unsigned int i;
r = x % P;
for( i = 0; i < h[r].size(); i++)
{
if(h[r][i].first == x)
{
h[r][i].second++;
break;
}
}
if(i == h[r].size())
{
k++;
h[r].push_back(make_pair(x,1));
}
}
void Delete(unsigned int x, unsigned int &k)
{
int r;
r = x % P;
for(unsigned i = 0; i < h[r].size(); i++)
{
if(h[r][i].first == x)
{
h[r][i].second--;
if(h[r][i].second == 0)
{
k--;
swap(h[r][i],h[r][h[r].size()-1]);
h[r].pop_back();
}
break;
}
}
}
long long Solve(int M)
{
unsigned int i,j,k;
long long sol = 0;
for(i = 1; i <= P; i++) h[i].clear();
j = 1;
k = 0;
for(i = 1; i <= N; i++)
{
Add(a[i],k);
while(k > M)
{
Delete(a[j],k);
j++;
}
sol = sol + (i-j+1);
}
return sol;
}
int main()
{
fin>>N>>L>>U;
for(int i = 1; i <= N; i++) fin>>a[i];
fout << Solve(U) - Solve(L-1) << "\n";
fout.close();
return 0;
}