166452025-05-07 18:04:59algoproMaximum felosztáscpp17Runtime error 40/100328ms40964 KiB
// UUID: dc1c6d44-ada0-426c-90c5-5be475e5410c
#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], dp[MAXN][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] = dp[0][0] = 1;
    for (int i = 1; i <= n; i++) {

        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][i] += pref[idx-1][r-1] - (l >= 2 ? pref[idx-1][l-2] : 0);
                dp[idx][i] %= MOD;
            }
        }

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

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int t = 1; 
    // cin >> t;
    while (t--) solve();
    return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms572 KiB
2Accepted19ms11232 KiB
subtask210/10
3Accepted1ms508 KiB
4Accepted1ms316 KiB
5Accepted1ms316 KiB
6Accepted1ms508 KiB
7Accepted1ms316 KiB
8Accepted1ms316 KiB
subtask315/15
9Accepted4ms2868 KiB
10Accepted3ms1588 KiB
11Accepted2ms1588 KiB
12Accepted2ms1084 KiB
13Accepted1ms564 KiB
14Accepted1ms316 KiB
15Accepted6ms4428 KiB
16Accepted13ms5324 KiB
17Accepted3ms2100 KiB
18Accepted4ms2356 KiB
subtask415/15
19Accepted50ms20108 KiB
20Accepted20ms11484 KiB
21Accepted4ms2624 KiB
22Accepted2ms564 KiB
23Accepted2ms564 KiB
24Accepted2ms564 KiB
25Accepted23ms11060 KiB
26Accepted23ms11616 KiB
27Accepted328ms40964 KiB
28Accepted78ms30024 KiB
29Accepted3ms820 KiB
30Accepted2ms820 KiB
31Accepted17ms5700 KiB
32Accepted6ms4444 KiB
33Accepted130ms20692 KiB
34Accepted34ms15172 KiB
35Accepted98ms13912 KiB
36Accepted18ms10356 KiB
37Accepted8ms3572 KiB
38Accepted4ms2612 KiB
subtask50/60
39Runtime error1ms508 KiB
40Runtime error1ms316 KiB
41Runtime error1ms508 KiB
42Runtime error1ms316 KiB
43Runtime error1ms316 KiB
44Runtime error1ms508 KiB
45Runtime error1ms316 KiB
46Runtime error1ms448 KiB
47Runtime error1ms512 KiB
48Runtime error1ms508 KiB
49Runtime error1ms316 KiB
50Runtime error1ms316 KiB
51Runtime error1ms316 KiB
52Runtime error1ms508 KiB
53Runtime error1ms316 KiB
54Runtime error1ms316 KiB
55Runtime error3ms564 KiB
56Runtime error1ms316 KiB
57Runtime error1ms316 KiB
58Runtime error1ms316 KiB
59Runtime error3ms564 KiB
60Runtime error1ms564 KiB
61Runtime error6ms2100 KiB
62Runtime error1ms316 KiB
63Runtime error3ms564 KiB
64Runtime error1ms404 KiB
65Runtime error3ms564 KiB
66Runtime error1ms508 KiB
67Runtime error3ms564 KiB
68Runtime error1ms316 KiB
69Runtime error3ms568 KiB
70Runtime error1ms316 KiB
71Runtime error2ms316 KiB