10122 2024. 03. 27 17:37:06 111 Maximum felosztás cpp17 Időlimit túllépés 40/100 1.083s 103632 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){
	}
	
	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;
	
	ST(int n):n(n),a(n*8),b(n*8){
	}
	
	void push(int i,int l,int r){
		if(b[i]==-1){
			a[i]=0;
			b[i]=0;
			b[i*2+1]=-1;
			b[i*2+2]=-1;
		}
		else{
			a[i]+=b[i];
			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);
		// for(int i=l;i<=r;i++){
			// a[i]+=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);
		// MI x=0;
		// for(int i=l;i<=r;i++){
			// x+=a[i];
		// }
		// return x;
	}
	
	void clear(){
		b[0]=-1;
	}
};

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;
			for(int k=j;k>0&&v[k]<=w[i];k--){
				x+=dp[i&1^1].sum(k-1,k-1);
			}
			for(int k=j;k<=N&&(k==j||v[k]<w[i]);k++){
				dp[i&1].add(k,k,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 2112 KiB
2 Elfogadva 12ms 4164 KiB
subtask2 10/10
3 Elfogadva 7ms 2928 KiB
4 Elfogadva 3ms 3020 KiB
5 Elfogadva 8ms 3112 KiB
6 Elfogadva 7ms 3324 KiB
7 Elfogadva 3ms 3536 KiB
8 Elfogadva 3ms 3724 KiB
subtask3 15/15
9 Elfogadva 4ms 3944 KiB
10 Elfogadva 4ms 4212 KiB
11 Elfogadva 4ms 4016 KiB
12 Elfogadva 4ms 4276 KiB
13 Elfogadva 3ms 4524 KiB
14 Elfogadva 3ms 4724 KiB
15 Elfogadva 16ms 4752 KiB
16 Elfogadva 16ms 4756 KiB
17 Elfogadva 8ms 4868 KiB
18 Elfogadva 8ms 4612 KiB
subtask4 15/15
19 Elfogadva 10ms 5964 KiB
20 Elfogadva 14ms 6108 KiB
21 Elfogadva 10ms 6352 KiB
22 Elfogadva 52ms 5916 KiB
23 Elfogadva 12ms 6308 KiB
24 Elfogadva 37ms 6428 KiB
25 Elfogadva 9ms 6508 KiB
26 Elfogadva 8ms 6512 KiB
27 Elfogadva 307ms 6520 KiB
28 Elfogadva 266ms 6512 KiB
29 Elfogadva 16ms 6512 KiB
30 Elfogadva 195ms 6508 KiB
31 Elfogadva 45ms 6400 KiB
32 Elfogadva 171ms 6428 KiB
33 Elfogadva 153ms 6412 KiB
34 Elfogadva 202ms 6508 KiB
35 Elfogadva 104ms 6516 KiB
36 Elfogadva 96ms 6604 KiB
37 Elfogadva 26ms 6232 KiB
38 Elfogadva 45ms 6600 KiB
subtask5 0/60
39 Időlimit túllépés 1.06s 51160 KiB
40 Időlimit túllépés 1.06s 49084 KiB
41 Időlimit túllépés 1.052s 49068 KiB
42 Időlimit túllépés 1.075s 45180 KiB
43 Időlimit túllépés 1.062s 44332 KiB
44 Elfogadva 615ms 103632 KiB
45 Időlimit túllépés 1.072s 48448 KiB
46 Időlimit túllépés 1.078s 47572 KiB
47 Elfogadva 963ms 100568 KiB
48 Időlimit túllépés 1.065s 47436 KiB
49 Időlimit túllépés 1.006s 100628 KiB
50 Időlimit túllépés 1.075s 48192 KiB
51 Időlimit túllépés 1.07s 46532 KiB
52 Időlimit túllépés 1.067s 50460 KiB
53 Időlimit túllépés 1.055s 51548 KiB
54 Időlimit túllépés 1.054s 44468 KiB
55 Időlimit túllépés 1.077s 48372 KiB
56 Elfogadva 578ms 96104 KiB
57 Elfogadva 588ms 96016 KiB
58 Időlimit túllépés 1.069s 53504 KiB
59 Időlimit túllépés 1.065s 53600 KiB
60 Időlimit túllépés 1.067s 48532 KiB
61 Időlimit túllépés 1.072s 48548 KiB
62 Időlimit túllépés 1.067s 48256 KiB
63 Időlimit túllépés 1.052s 46952 KiB
64 Időlimit túllépés 1.075s 49092 KiB
65 Időlimit túllépés 1.075s 46816 KiB
66 Időlimit túllépés 1.075s 49796 KiB
67 Időlimit túllépés 1.083s 52920 KiB
68 Időlimit túllépés 1.059s 47680 KiB
69 Időlimit túllépés 1.064s 50620 KiB
70 Időlimit túllépés 1.078s 45296 KiB
71 Időlimit túllépés 1.05s 45272 KiB