Pagini recente » Cod sursa (job #653757) | Cod sursa (job #3265840) | Cod sursa (job #421298) | Cod sursa (job #2709724) | Cod sursa (job #3258656)
#include <bits/stdc++.h>
#define MOD 666013
using namespace std;
ifstream fin("pedefe.in");
ofstream fout("pedefe.out");
long long n,n1,n2,n3,v1[505],v2[505],v3[105],sol,aux,aib[505],i,j,k,l,pos1[105],pos2[105];
void update(int p, int val){
for(;p<=500;p+=(p&-p))
aib[p] = (aib[p]+val)%MOD;
}
long long query(int p){
long long sum = 0;
for(;p>0;p-=(p&-p))
sum = (sum+aib[p])%MOD;
return sum%MOD;
}
int main()
{
fin>>n1>>n2>>n3;
for(i=1;i<=n1;i++)
fin>>v1[i];
for(i=1;i<=n2;i++)
fin>>v2[i];
for(i=1;i<=n3;i++){
fin>>v3[i];
if(v3[i] < v3[i-1]){
fout<<0;
return 0;
}
}
k=n3;
for(i=n1;i>0;i--){
if(v1[i] == v3[k]){
pos1[k--] = i;
}
}
k=n3;
for(j=n2;j>0;j--){
if(v2[j] == v3[k]){
pos2[k--] = j;
}
}
for(k=1;k<=n3;k++){
for(i=pos1[k-1]+1;i<=pos1[k];i++){
for(j=pos2[k-1]+1;j<=pos2[k];j++){
if(v1[i] == v2[j] && v1[i] >= v3[k-1] && v1[i] <= v3[k]){
//cout<<"val: "<<v1[i]<<" query: "<<query(v1[i])<<'\n';
update(v1[i], 1);
}
}
}
aux = query(v3[k]);
for(i=0;i<=500;i++) aib[i] = 0;
update(v3[k], aux);
}
sol = query(v3[n3]);
//cout<<'\n'<<sol;
for(i=pos1[n3]+1;i<=n1;i++){
for(j=pos2[n3]+1;j<=n2;j++){
if(v1[i] == v2[j] && v1[i] >= v3[n3]){
update(v1[i], 1);
sol = max(sol, query(v1[i]));
}
}
}
fout<<sol%MOD;
return 0;
}