| 10124 | 2024-03-27 17:48:49 | 111 | Maximum felosztás | cpp17 | Időlimit túllépés 40/100 | 1.103s | 137052 KiB |
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define MOD 1000000007
struct MI{
int x;
MI():x(0){
}
MI(int x):x(x){
}
MI operator*(MI o){
return x*o.x%MOD;
}
void operator=(MI o){
x=o.x;
}
void operator+=(MI o){
x+=o.x;
if(x>=MOD){
x-=MOD;
}
}
operator int(){
return x;
}
};
struct ST{
int n;
vector<MI>a,b,c;
ST(int n):n(n),a(n*8),b(n*8),c(n*8){
}
void push(int i,int l,int r){
if(c[i]==1){
a[i]=0;
b[i]=0;
c[i]=0;
c[i*2+1]=1;
c[i*2+2]=1;
}
else{
a[i]+=b[i]*MI(r-l+1);
if(c[i*2+1]){
a[i*2+1]=0;
b[i*2+1]=0;
c[i*2+1]=0;
}
if(c[i*2+2]){
a[i*2+2]=0;
b[i*2+2]=0;
c[i*2+2]=0;
}
b[i*2+1]+=b[i];
b[i*2+2]+=b[i];
b[i]=0;
}
}
void add(int i,int l,int r,int ll,int rr,int x){
if(l>rr||r<ll){
return;
}
push(i,l,r);
if(l>=ll&&r<=rr){
b[i]+=x;
push(i,l,r);
return;
}
push(i,l,r);
add(i*2+1,l,(l+r)/2,ll,rr,x);
add(i*2+2,(l+r)/2+1,r,ll,rr,x);
a[i]=a[i*2+1]+a[i*2+2];
}
void add(int l,int r,int x){
add(0,0,n-1,l,r,x);
}
MI sum(int i,int l,int r,int ll,int rr){
if(l>rr||r<ll){
return 0;
}
push(i,l,r);
if(l>=ll&&r<=rr){
return a[i];
}
MI ans=0;
ans+=sum(i*2+1,l,(l+r)/2,ll,rr);
ans+=sum(i*2+2,(l+r)/2+1,r,ll,rr);
return ans;
}
MI sum(int l,int r){
return sum(0,0,n-1,l,r);
}
void clear(){
fill(a.begin(),a.end(),0);
fill(b.begin(),b.end(),0);
}
};
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N,M;
cin>>N>>M;
vector<int>v(N+1),w(M+1);
map<int,vector<int>>m;
for(int i=1;i<=N;i++){
cin>>v[i];
m[v[i]].push_back(i);
}
for(int i=1;i<=M;i++){
cin>>w[i];
}
vector<ST>dp(2,ST(N+1));
dp[0].add(0,0,1);
for(int i=1;i<=M;i++){
dp[i&1].clear();
for(int j:m[w[i]]){
MI x=0;
int k;
for(k=j;k>0&&v[k]<=w[i];k--){
}
x+=dp[i&1^1].sum(k,j-1);
for(k=j;k<=N&&(k==j||v[k]<w[i]);k++){
}
dp[i&1].add(j,k-1,x);
}
// for(int j=1;j<=N;j++){
// cout<<setw(4)<<dp[i&1].sum(j,j)<<' ';
// }
// cout<<'\n';
}
cout<<dp[M&1].sum(N,N)<<'\n';
return 0;
}
| Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 0/0 | ||||||
| 1 | Elfogadva | 3ms | 2128 KiB | ||||
| 2 | Elfogadva | 9ms | 4960 KiB | ||||
| subtask2 | 10/10 | ||||||
| 3 | Elfogadva | 3ms | 3144 KiB | ||||
| 4 | Elfogadva | 3ms | 3372 KiB | ||||
| 5 | Elfogadva | 3ms | 3480 KiB | ||||
| 6 | Elfogadva | 3ms | 3664 KiB | ||||
| 7 | Elfogadva | 3ms | 4008 KiB | ||||
| 8 | Elfogadva | 3ms | 3932 KiB | ||||
| subtask3 | 15/15 | ||||||
| 9 | Elfogadva | 4ms | 3920 KiB | ||||
| 10 | Elfogadva | 4ms | 4160 KiB | ||||
| 11 | Elfogadva | 4ms | 4408 KiB | ||||
| 12 | Elfogadva | 3ms | 4356 KiB | ||||
| 13 | Elfogadva | 3ms | 4324 KiB | ||||
| 14 | Elfogadva | 3ms | 4316 KiB | ||||
| 15 | Elfogadva | 4ms | 4584 KiB | ||||
| 16 | Elfogadva | 4ms | 4736 KiB | ||||
| 17 | Elfogadva | 4ms | 4684 KiB | ||||
| 18 | Elfogadva | 4ms | 5092 KiB | ||||
| subtask4 | 15/15 | ||||||
| 19 | Elfogadva | 17ms | 7024 KiB | ||||
| 20 | Elfogadva | 10ms | 6980 KiB | ||||
| 21 | Elfogadva | 6ms | 7048 KiB | ||||
| 22 | Elfogadva | 6ms | 6784 KiB | ||||
| 23 | Elfogadva | 4ms | 7320 KiB | ||||
| 24 | Elfogadva | 4ms | 7284 KiB | ||||
| 25 | Elfogadva | 10ms | 7324 KiB | ||||
| 26 | Elfogadva | 9ms | 7324 KiB | ||||
| 27 | Elfogadva | 25ms | 7416 KiB | ||||
| 28 | Elfogadva | 21ms | 7412 KiB | ||||
| 29 | Elfogadva | 4ms | 7196 KiB | ||||
| 30 | Elfogadva | 6ms | 7072 KiB | ||||
| 31 | Elfogadva | 8ms | 7040 KiB | ||||
| 32 | Elfogadva | 8ms | 7044 KiB | ||||
| 33 | Elfogadva | 14ms | 7056 KiB | ||||
| 34 | Elfogadva | 14ms | 7472 KiB | ||||
| 35 | Elfogadva | 10ms | 7556 KiB | ||||
| 36 | Elfogadva | 9ms | 7496 KiB | ||||
| 37 | Elfogadva | 6ms | 7380 KiB | ||||
| 38 | Elfogadva | 6ms | 7484 KiB | ||||
| subtask5 | 0/60 | ||||||
| 39 | Időlimit túllépés | 1.062s | 69984 KiB | ||||
| 40 | Időlimit túllépés | 1.074s | 67604 KiB | ||||
| 41 | Időlimit túllépés | 1.103s | 67792 KiB | ||||
| 42 | Időlimit túllépés | 1.044s | 63696 KiB | ||||
| 43 | Időlimit túllépés | 1.07s | 62952 KiB | ||||
| 44 | Időlimit túllépés | 1.069s | 72252 KiB | ||||
| 45 | Időlimit túllépés | 1.064s | 67500 KiB | ||||
| 46 | Időlimit túllépés | 1.049s | 66528 KiB | ||||
| 47 | Időlimit túllépés | 1.06s | 70988 KiB | ||||
| 48 | Időlimit túllépés | 1.072s | 66540 KiB | ||||
| 49 | Időlimit túllépés | 1.064s | 71096 KiB | ||||
| 50 | Időlimit túllépés | 1.077s | 67352 KiB | ||||
| 51 | Időlimit túllépés | 1.06s | 65612 KiB | ||||
| 52 | Elfogadva | 584ms | 135388 KiB | ||||
| 53 | Elfogadva | 301ms | 137052 KiB | ||||
| 54 | Elfogadva | 568ms | 123148 KiB | ||||
| 55 | Elfogadva | 382ms | 131072 KiB | ||||
| 56 | Időlimit túllépés | 1.07s | 68644 KiB | ||||
| 57 | Időlimit túllépés | 1.067s | 68576 KiB | ||||
| 58 | Időlimit túllépés | 1.06s | 72628 KiB | ||||
| 59 | Időlimit túllépés | 1.014s | 72560 KiB | ||||
| 60 | Elfogadva | 356ms | 131088 KiB | ||||
| 61 | Időlimit túllépés | 1.062s | 67364 KiB | ||||
| 62 | Időlimit túllépés | 1.054s | 67232 KiB | ||||
| 63 | Időlimit túllépés | 1.069s | 65824 KiB | ||||
| 64 | Időlimit túllépés | 1.042s | 67944 KiB | ||||
| 65 | Időlimit túllépés | 1.07s | 65744 KiB | ||||
| 66 | Időlimit túllépés | 1.07s | 68672 KiB | ||||
| 67 | Időlimit túllépés | 1.07s | 71988 KiB | ||||
| 68 | Időlimit túllépés | 1.074s | 66704 KiB | ||||
| 69 | Időlimit túllépés | 1.077s | 69948 KiB | ||||
| 70 | Időlimit túllépés | 1.046s | 64368 KiB | ||||
| 71 | Időlimit túllépés | 1.042s | 64224 KiB | ||||