Pagini recente » Cod sursa (job #1501630) | Cod sursa (job #1123478) | Cod sursa (job #2225913) | Cod sursa (job #4551) | Cod sursa (job #3282824)
#include <fstream>
using namespace std;
ifstream cin("pedefe.in");
ofstream cout("pedefe.out");
const int N=505,mod=666013;
int a[N],b[N],c[N],n,m,p,aib[N],sume[N],dp[2][N][N];
int pred,act;
void update(int poz,int val)
{
for(int i=poz; i<N; i+=(i&-i))
{
aib[i]+=val;
aib[i]%=mod;
}
}
int query(int poz)
{
int sum=0;
for(int i=poz; i>0; i-=(i&-i))
{
sum+=aib[i];
sum%=mod;
}
return sum;
}
void citeste()
{
cin>>n>>m>>p;
for(int i=1; i<=n; i++)
cin>>a[i];
for(int i=1; i<=m; i++)
cin>>b[i];
for(int i=1; i<=p; i++)
cin>>c[i];
}
int main()
{
citeste();
for(int stare=0; stare<=p; stare++)
{
pred=(stare%2);
act=((stare+1)%2);
for(int i=1; i<N; i++)
{
aib[i]=0;
sume[i]=0;
for(int j=1; j<N; j++)
dp[act][i][j]=0;
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<N; j++)
aib[j]=0;
for(int j=1; j<=m; j++)
{
if(a[i]==b[j])
{
if(a[i]==c[stare])
{
dp[act][i][j]=((dp[act][i][j]+query(a[i])+(stare==1)))%mod;
}
else
dp[pred][i][j]=((dp[pred][i][j]+query(a[i])+(stare==1)))%mod;
}
update(b[j],sume[j]);
sume[j]+=dp[pred][i][j];
sume[j]%=mod;
}
}
}
int ind=(p+1)%2;
int ans=0;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
{
ans+=dp[ind][i][j];
ans%=mod;
}
cout<<ans;
return 0;
}