Pagini recente » Cod sursa (job #2617969) | Cod sursa (job #1628383) | Cod sursa (job #303794) | Cod sursa (job #2677011) | Cod sursa (job #2081266)
/// OrangeWarrior #1
#include<bits/stdc++.h>
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
int n,a,b;
bool ok=0,ok2=0;
unsigned int v[(1<<20)+3];
long long sol;
unordered_map<unsigned int,int>st;
int nrda, nrdb;
unordered_map<unsigned int,int>dr;
int main()
{
f>>n>>a>>b;
for(int i=1;i<=n;++i)
f>>v[i];
int c1=1;
int c2=1;
for(int i=1;i<=n;++i)
{
if(i>1){
if(st[v[i-1]]==1)
--nrda;
if(dr[v[i-1]]==1)
--nrdb;
st[v[i-1]]--,dr[v[i-1]]--;
}
while(nrda<a && c1<=n && !ok2)
{
if(st[v[c1]]==0)
++nrda;
st[v[c1]]++;
++c1;
if(c1>n){
c1=n;ok2=1;break;}
}
while(nrdb<=b && c2<=n && !ok)
{
if(!ok && nrdb==b && dr[v[c2]]==0)
break;
else
{
if(dr[v[c2]]==0)
++nrdb;
dr[v[c2]]++;
++c2;
if(c2>n){
ok=1;c2=n;break;
}
}
}
if(nrda==a && nrdb>=a){
sol+=c2-(c1-1)+1;
if(nrdb==a)
--sol;
}
}
g<<sol;
return 0;
}