Pagini recente » Cod sursa (job #2048397) | Cod sursa (job #320169) | Cod sursa (job #2267985) | Cod sursa (job #2552969) | Cod sursa (job #858147)
Cod sursa(job #858147)
#include <fstream>
#include <algorithm>
#define MAX 1000005
using namespace std;
int N, L, U, lCnt, rCnt, sol;
unsigned int aux[MAX], V[MAX];
int leftAp[MAX], rightAp[MAX];
inline void add(int val, int V[], int &cnt)
{
if(!V[val]++) cnt++;
}
inline void rmv(int val, int V[], int &cnt)
{
if(--V[val] == 0) cnt--;
}
int main()
{
ifstream in("secv5.in"); in>>N>>L>>U;
for(int i = 1; i <= N; i++) in>>V[i], aux[i] = V[i];
in.close();
sort(aux + 1, aux + N + 1); aux[0] = 1;
for(int i = 2; i <= N; i++) if(aux[aux[0]] != aux[i]) aux[++aux[0]] = aux[i];
for(int i = 1; i <= N; i++) V[i] = lower_bound(aux + 1, aux + aux[0] + 1, V[i]) - aux;
for(int i = 1, left = 1, right = 1; i <= N && (right <= N || rCnt >= L); i++)
{
for(; left <= N && lCnt < L; left++) add(V[left], leftAp, lCnt);
for(; right <= N && rCnt <= U; right++) add(V[right], rightAp, rCnt);
sol += (right - left + 1);
rmv(V[i], leftAp, lCnt); rmv(V[i], rightAp, rCnt);
}
ofstream out("secv5.out"); out<<sol<<"\n"; out.close();
return 0;
}