166482025-05-07 18:11:40algoproMaximum felosztáscpp17Runtime error 40/100301ms23868 KiB
// UUID: beae290a-5ec2-41f3-b953-575eb6f2fb35
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const int MAXN = 2001;
const ll INF = 1e15;
const ll MOD = 1e9+7;

ll a[MAXN], b[MAXN], pref[MAXN][MAXN];
map<ll, int> value_to_bidx;

void solve() {
    int n, m; cin >> n >> m;
    a[0] = INF;
    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 <= m; i++) {
        value_to_bidx[b[i]] = i;
    }

    vector<int> st;
    st.emplace_back(0);
    pref[0][0] = 1;
    for (int i = 1; i <= n; i++) {
        
        vector<ll> dp(m+1);
        while (!st.empty() && a[st.back()] <= a[i]) st.pop_back();
        st.emplace_back(i);
        
        for (int j = st.size()-1; j >= 1; j--) {
            if (value_to_bidx.count(a[st[j]])) {
                int idx = value_to_bidx[a[st[j]]];
                
                int l = st[j-1]+1, r = st[j];
                dp[idx] += pref[idx-1][r-1] - (l >= 2 ? pref[idx-1][l-2] : 0);
                dp[idx] %= MOD;
            }
        }

        for (int b = 0; b <= m; b++) {
            pref[b][i] = pref[b][i-1] + dp[b];
        }

        if (i == n) cout << dp[m] << "\n";
    }
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int t = 1; 
    // cin >> t;
    while (t--) solve();
    return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms316 KiB
2Accepted14ms8256 KiB
subtask210/10
3Accepted1ms316 KiB
4Accepted1ms316 KiB
5Accepted1ms316 KiB
6Accepted1ms316 KiB
7Accepted1ms316 KiB
8Accepted1ms316 KiB
subtask315/15
9Accepted3ms1844 KiB
10Accepted2ms1260 KiB
11Accepted2ms1076 KiB
12Accepted2ms820 KiB
13Accepted1ms564 KiB
14Accepted1ms316 KiB
15Accepted4ms3124 KiB
16Accepted9ms3124 KiB
17Accepted2ms1588 KiB
18Accepted3ms1588 KiB
subtask415/15
19Accepted30ms15972 KiB
20Accepted16ms8204 KiB
21Accepted3ms1844 KiB
22Accepted2ms400 KiB
23Accepted2ms564 KiB
24Accepted1ms316 KiB
25Accepted13ms8240 KiB
26Accepted13ms8348 KiB
27Accepted301ms23868 KiB
28Accepted41ms23860 KiB
29Accepted2ms564 KiB
30Accepted2ms564 KiB
31Accepted14ms3620 KiB
32Accepted4ms3620 KiB
33Accepted107ms12104 KiB
34Accepted17ms12152 KiB
35Accepted86ms8244 KiB
36Accepted10ms8204 KiB
37Accepted4ms1844 KiB
38Accepted3ms2040 KiB
subtask50/60
39Runtime error1ms316 KiB
40Runtime error1ms316 KiB
41Runtime error1ms500 KiB
42Runtime error1ms564 KiB
43Runtime error1ms512 KiB
44Runtime error1ms316 KiB
45Runtime error1ms316 KiB
46Runtime error2ms316 KiB
47Runtime error1ms316 KiB
48Runtime error1ms316 KiB
49Runtime error2ms508 KiB
50Runtime error1ms316 KiB
51Runtime error1ms316 KiB
52Runtime error1ms316 KiB
53Runtime error1ms316 KiB
54Runtime error1ms316 KiB
55Runtime error3ms564 KiB
56Runtime error1ms320 KiB
57Runtime error2ms316 KiB
58Runtime error2ms316 KiB
59Runtime error3ms564 KiB
60Runtime error1ms316 KiB
61Runtime error6ms2100 KiB
62Runtime error1ms316 KiB
63Runtime error3ms568 KiB
64Runtime error1ms316 KiB
65Runtime error3ms564 KiB
66Runtime error1ms316 KiB
67Runtime error3ms564 KiB
68Runtime error1ms316 KiB
69Runtime error3ms564 KiB
70Runtime error1ms316 KiB
71Runtime error2ms580 KiB