Pagini recente » Cod sursa (job #1378847) | Cod sursa (job #903241) | Cod sursa (job #760218) | Cod sursa (job #1862088) | Cod sursa (job #2750404)
#include <iostream>
#include <fstream>
#include <cstring>
#define NMAX 1048576
#define MOD1 1000003
#define MOD2 1000007
using namespace std;
ifstream fin ("secv5.in");
ofstream fout ("secv5.out");
int N, L, U;
unsigned int v[NMAX + 1];
int f1[MOD1];
int f2[MOD2];
int secventeMaxim(int lg){
int raspuns = 0;
int cnt = 0;
int left = 1;
for(int right = 1; right <= N; right++){
unsigned int x = v[right];
if(f1[x % MOD1] == 0 || f2[x % MOD2] == 0){
cnt++;
}
f1[x % MOD1]++;
f2[x % MOD2]++;
while(cnt > lg){
unsigned int y = v[left];
f1[y % MOD1]--;
f2[y % MOD2]--;
if(f1[y % MOD1] == 0 || f2[y % MOD2] == 0){
cnt--;
}
left++;
}
//cout << left << ' ' << right << "\ncnt = " << cnt << "\n";
raspuns = raspuns + (right - left + 1); //in cate moduri pot sa mut left, iar right sa ramana fixat
//cout << "\n";
}
return raspuns;
}
int main()
{
fin >> N >> L >> U;
for(int i = 1; i <= N; i++){
fin >> v[i];
}
int mx = secventeMaxim(U);
memset(f1, 0, sizeof(f1));
memset(f2, 0, sizeof(f2));
int mn = secventeMaxim(L - 1);
fout << mx - mn;
return 0;
}