Pagini recente » Cod sursa (job #2829603) | Cod sursa (job #1436485) | Cod sursa (job #1234639) | Cod sursa (job #450080) | Cod sursa (job #1724836)
#include <cstdio>
#include <algorithm>
#define MAX 6000000
#define MaxL 10005
using namespace std;
char f[MAX];
int pos=0,v[MaxL]={},first[MaxL]={},last[MaxL]={},final[MaxL]={},N,M,P,X,ANSWER[40005]={},aux[40005]={};
void r(int &nr)
{
nr=0;
while(f[pos]<'0'||f[pos]>'9')
pos++;
while(f[pos]>='0'&&f[pos]<='9')
nr=nr*10+f[pos++]-'0';
}
int binsearch(int value)
{
int lw=1,mid,hi=N;
while(lw<=hi)
{
mid=(lw+hi)>>1;
if(v[mid]<value)
lw=mid+1;
else if(v[mid]>value)
hi=mid-1;
else return mid;
}
return lw;
}
void Multiply(int A[],int B[],int nr)
{
int i=1,t=0;
while(i<=B[0]||t>0)
{
A[i]=B[i]*nr+t;
t=A[i]/100000;
A[i]%=100000;
i++;
}
A[0]=i-1;
}
void Sum(int A[],int B[])
{
int i=1,t=0;
while(i<=A[0]||i<=B[0]||t>0)
{
A[i]+=t+B[i];
t=A[i]/100000;
A[i]%=100000;
i++;
}
A[0]=i-1;
}
void Substract(int S[],int B[],int C[],int Base)
{
int j,size=1;
for(int i=1;i<=P;i++)
{
C[i]-=B[i];
j=i;
if(C[j]<0)
{
C[j]=Base+C[j];
C[j+1]--;
j++;
}
S[size++]=C[i];
}
while(S[size]==0)
size--;
S[1]--;
j=1;
while(S[j]<0)
{
S[j]=Base+S[j];
S[j+1]--;
j++;
}
int pow[40005]={1,1};
for(int i=1;i<=size;i++)
{
int aux[40005]={};
Multiply(aux,pow,S[i]);
Multiply(pow,pow,Base);
Sum(ANSWER,aux);
}
}
int main()
{
freopen("nextseq.in","r",stdin);
freopen("nextseq.out","w",stdout);
fread(f,1,MAX,stdin);
r(N);r(M);r(P);
for(int i=1;i<=N;i++)
r(v[i]);
sort(v+1,v+1+N);
for(int i=0;i<M;i++)
{
r(X);
first[M-i]=binsearch(X);
}
for(int i=0;i<P;i++)
{
r(X);
last[P-i]=binsearch(X);
}
Substract(final,first,last,N);
for(int i=ANSWER[0];i>0;i--)
printf("%d",ANSWER[i]);
return 0;
}