166452025-05-07 18:04:59algoproMaximum felosztáscpp17Futási hiba 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms572 KiB
2Elfogadva19ms11232 KiB
subtask210/10
3Elfogadva1ms508 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms508 KiB
7Elfogadva1ms316 KiB
8Elfogadva1ms316 KiB
subtask315/15
9Elfogadva4ms2868 KiB
10Elfogadva3ms1588 KiB
11Elfogadva2ms1588 KiB
12Elfogadva2ms1084 KiB
13Elfogadva1ms564 KiB
14Elfogadva1ms316 KiB
15Elfogadva6ms4428 KiB
16Elfogadva13ms5324 KiB
17Elfogadva3ms2100 KiB
18Elfogadva4ms2356 KiB
subtask415/15
19Elfogadva50ms20108 KiB
20Elfogadva20ms11484 KiB
21Elfogadva4ms2624 KiB
22Elfogadva2ms564 KiB
23Elfogadva2ms564 KiB
24Elfogadva2ms564 KiB
25Elfogadva23ms11060 KiB
26Elfogadva23ms11616 KiB
27Elfogadva328ms40964 KiB
28Elfogadva78ms30024 KiB
29Elfogadva3ms820 KiB
30Elfogadva2ms820 KiB
31Elfogadva17ms5700 KiB
32Elfogadva6ms4444 KiB
33Elfogadva130ms20692 KiB
34Elfogadva34ms15172 KiB
35Elfogadva98ms13912 KiB
36Elfogadva18ms10356 KiB
37Elfogadva8ms3572 KiB
38Elfogadva4ms2612 KiB
subtask50/60
39Futási hiba1ms508 KiB
40Futási hiba1ms316 KiB
41Futási hiba1ms508 KiB
42Futási hiba1ms316 KiB
43Futási hiba1ms316 KiB
44Futási hiba1ms508 KiB
45Futási hiba1ms316 KiB
46Futási hiba1ms448 KiB
47Futási hiba1ms512 KiB
48Futási hiba1ms508 KiB
49Futási hiba1ms316 KiB
50Futási hiba1ms316 KiB
51Futási hiba1ms316 KiB
52Futási hiba1ms508 KiB
53Futási hiba1ms316 KiB
54Futási hiba1ms316 KiB
55Futási hiba3ms564 KiB
56Futási hiba1ms316 KiB
57Futási hiba1ms316 KiB
58Futási hiba1ms316 KiB
59Futási hiba3ms564 KiB
60Futási hiba1ms564 KiB
61Futási hiba6ms2100 KiB
62Futási hiba1ms316 KiB
63Futási hiba3ms564 KiB
64Futási hiba1ms404 KiB
65Futási hiba3ms564 KiB
66Futási hiba1ms508 KiB
67Futási hiba3ms564 KiB
68Futási hiba1ms316 KiB
69Futási hiba3ms568 KiB
70Futási hiba1ms316 KiB
71Futási hiba2ms316 KiB