Pagini recente » Cod sursa (job #1907429) | Cod sursa (job #1654680) | Cod sursa (job #81929) | Cod sursa (job #135294) | Cod sursa (job #479954)
Cod sursa(job #479954)
#include<iostream>
#include<fstream>
#include<vector>
#define r 699957
using namespace std;
struct elem {
unsigned int inf, ap;
elem(unsigned int a, unsigned int b){
inf = a;
ap = b;
}
};
vector <elem> h1[r+10], h2[r+10];
unsigned int a[1100000];
int l, u;
void add(vector <elem> h[], unsigned int x, int &nr){
int poz = x%r;
int cod = 1;
for (int i = 0; i < h[poz].size(); i++)
if (h[poz][i].inf == x){
h[poz][i].ap++;
cod = 0;
break;
}
if (cod == 1){
nr++;
h[poz].push_back(elem(x, 1));
}
}
void decrease(vector <elem> h[], int &nr, int &p, int n, int t){
int cod = 1, poz;
while (cod == 1){
poz = a[p]%r;
for (int i = 0; i < h[poz].size(); i++)
if (h[poz][i].inf == a[p]){
if (h[poz][i].ap > 1){
h[poz][i].ap--;
p++;
}
else {
if (t == 1 && nr-1 < n)
cod = 0;
else {
nr--;
h[poz][i] = h[poz][h[poz].size()-1];
h[poz].pop_back();
p++;
if (t==0 && nr==n)
cod = 0;
}
}
break;
}
}
}
int main(){
ifstream f("secv5.in");
ofstream g("secv5.out");
int n, i = 0, j = 0, nr = 0, nr1 = 0, nr2 = 0, k = 1, p1, p2;
unsigned int x;
f>>n>>l>>u;
while (k <= n && nr1 < l){
f>>a[k];
add(h1, a[k], nr1);
add(h2, a[k], nr2);
k++;
}
nr2 = nr1;
p1 = p2 = 1;
decrease(h2, nr2, p2, l, 1);
nr = p2-p1+1;
for (j = k; j <= n; j++){
f>>a[j];
add(h1, a[j], nr1);
add(h2, a[j], nr2);
if (nr1 > u)
decrease(h1, nr1, p1, u, 0);
decrease(h2, nr2, p2, l, 1);
nr = nr+p2-p1+1;
}
g<<nr<<'\n';
return 0;
}