Pagini recente » Cod sursa (job #2776630) | Cod sursa (job #2797268) | Cod sursa (job #2430460) | Cod sursa (job #1657860) | Cod sursa (job #212343)
Cod sursa(job #212343)
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <list>
#include <set>
#include <algorithm>
#include <utility>
#include <string>
#include <functional>
#include <sstream>
#include <fstream>
#include <iostream>
using namespace std;
#define FOR(i,a,b) for (i=a;i<=b;i++)
#define fori(it,v) for (it=(v).begin();it!=(v).end();it++)
#define pb push_back
#define mp make_pair
#define fs first
#define ss second
#define all(c) c.begin(),c.end()
#define pf push_front
#define popb pop_back
#define popf pop_front
string s;
ifstream fin("secv5.in");
istringstream in;
vector<pair<unsigned int,int> > a(1048580),b(1048580);
int x[1048580],c,nr,x2[1048580];
long long sum1,sum2;
int main()
{
FILE *out;
int n,L,u,i;
out=fopen("secv5.out","w");
getline(fin,s,'\0');
in.str(s);
in>>n>>L>>u;
for(i=1;i<=n;i++)
{
in>>a[i].fs;
b[i-1].fs=a[i].fs;
b[i-1].ss=i;
}
sort(all(b));
vector<pair<unsigned int,int> >::iterator it,jt;
it=jt=b.begin();
it++;
a[jt->ss].ss=1;
for(;it!=b.end();++it,++jt)
{
a[it->ss].ss=a[jt->ss].ss;
if (it->fs!=jt->fs)
a[it->ss].ss++;
}
if (L!=1)
{
sum1=1;
c=1;
nr=1;
x[a[1].ss]++;
for (i=2;i<=n;++i)
{
if (!x[a[i].ss])
{
x[a[i].ss]++;
if (nr==L-1)
{
while (c<i)
{
if (!(--x[a[c].ss]))
{
c++;
break;
}
c++;
}
}
else
nr++;
}
else
x[a[i].ss]++;
sum1+=i-c+1;
}
}
sum2=1;
c=1;
nr=1;
x2[a[1].ss]++;
for (i=2;i<=n;++i)
{
if (!x2[a[i].ss])
{
x2[a[i].ss]++;
if (nr==u)
{
while (c<i)
{
if (!(--x2[a[c].ss]))
{
c++;
break;
}
c++;
}
}
else
nr++;
}
else
x2[a[i].ss]++;
sum2+=i-c+1;
}
fprintf(out,"%lld\n",sum2-sum1);
fclose(out);
return 0;
}