Pagini recente » Cod sursa (job #1378740) | Clasament cls11_10febr | Cod sursa (job #1648263) | Cod sursa (job #1001237) | Cod sursa (job #555953)
Cod sursa(job #555953)
#include<fstream>
#include<vector>
#include<algorithm>
#define dmax 1100000
#define mod 514229
using namespace std;
ifstream in("secv5.in");
ofstream out("secv5.out");
unsigned int n,k,l,u, nr, x[dmax],nr2;
unsigned int z[mod], w[dmax], pasu, pasl;
unsigned int sol;
vector<unsigned int>v;
vector<unsigned int>::iterator it;
void norm()
{ int i;
sort(v.begin(), v.end() );
it = unique(v.begin(), v.end() );
v.erase(it, v.end() );
for(i=1; i<=n; i++)
{ it = lower_bound(v.begin(), v.end(), x[i]);
x[i] = it - v.begin();
}
}
int main()
{
int i;
in>>n>>l>>u;
for(i=1;i<=n;i++)
{ in>>x[i];
v.push_back(x[i]);
}
in.close();
norm();
pasu = 1;
pasl = 1;
z[x[1]]=1;
w[x[1]]=1;
nr = 1;
nr2 = 1;
if(l==1)
sol=1;
for(i=2; i<=n; i++)
{
k = x[i];
if(!z[k])
nr++;
z[k]++;
while(nr > u && pasu < i)
{
k = x[pasu];
z[k]--;
if(!z[k])
nr--;
pasu++;
}
sol += (i - pasu +1);
k = x[i];
if(!w[k])
nr2++;
w[k]++;
while(nr2 > l-1 && pasl < i)
{
k = x[pasl];
w[k]--;
if(!w[k])
nr2--;
pasl++;
}
if(l!=1)
sol -= (i - pasl +1);
}
out<<sol;
out.close();
return 0;
}