Pagini recente » Cod sursa (job #3343) | Cod sursa (job #2338168) | Cod sursa (job #2112809) | Cod sursa (job #1763226) | Cod sursa (job #490178)
Cod sursa(job #490178)
#include<cstdio>
#include<algorithm>
using namespace std;
int nr,n,m,p,v[1<<14],a[1<<14],b[1<<14],cor[1<<14];
bool f[1<<14];
void read()
{
freopen("nextseq.in","r",stdin);
freopen("nextseq.out","w",stdout);
scanf("%d%d%d",&n,&m,&p);
for(int i=1;i<=n;i++)
scanf("%d",&v[i]);
for(int i=1;i<=m;i++)
scanf("%d",&a[i]);
for(int i=1;i<=p;i++)
scanf("%d",&b[i]);
}
int search(int x)
{
int pas=1<<14,i=0;
for(i=0;pas;pas>>=1)
if(i+pas<=n && v[i+pas]<x)
i+=pas;
return i+1;
}
void norm()
{
int p=0;
sort(v+1,v+n+1);
v[0]=-1;
for(int i=1;i<=n;i++)
if(v[i]!=v[i-1])
cor[i]=++p;
for(int i=1;i<=n;i++)
v[i]=cor[search(v[i])];
for(int i=1;i<=m;i++)
a[i]=cor[search(a[i])];
for(int i=1;i<=p;i++)
b[i]=cor[search(b[i])];
}
void egal()
{
while(m<p)
{
++m;
for(int i=m;i>=1;i--)
a[i]=a[i-1];
}
}
void back(int poz,bool lb,bool ba)
{
if(poz>m)
{
if(lb && ba)
nr++;
return;
}
for(int i=1;i<=n;i++)
if(!f[i]&& ((lb==true || v[i]<=b[poz]) && (ba==true || v[i]>=a[poz])))
{
f[i]=true;
if(lb==true)
{
if(ba==true)
back(poz+1,lb,ba);
else
{
if(v[i]>a[poz])
ba=true;
back(poz+1,lb,ba);
ba=false;
}
}
else
{
if(v[i]<b[poz])
lb=true;
if(ba==true)
back(poz+1,lb,ba);
else
{
if(v[i]>a[poz])
ba=true;
back(poz+1,lb,ba);
ba=false;
}
lb=false;
}
f[i]=false;
}
}
int main()
{
read();
norm();
egal();
back(1,false,false);
printf("%d",nr);
return 0;
}