166442025-05-07 18:04:14algoproMaximum felosztáscpp17Időlimit túllépés 25/1001.1s24108 KiB
// UUID: f25383c4-c4b3-461c-abcd-06a49a357bee
#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 a = 1; a <= n; a++) {
            for (int b = 0; b <= m; b++) {
                pref[b][a] = pref[b][a-1] + dp[b][a];
            }
        }

        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;
            }
        }
    }
    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
1Elfogadva1ms316 KiB
2Időlimit túllépés1.093s8348 KiB
subtask210/10
3Elfogadva2ms316 KiB
4Elfogadva2ms316 KiB
5Elfogadva2ms316 KiB
6Elfogadva2ms328 KiB
7Elfogadva2ms316 KiB
8Elfogadva2ms316 KiB
subtask315/15
9Elfogadva78ms2884 KiB
10Elfogadva37ms1464 KiB
11Elfogadva37ms1756 KiB
12Elfogadva14ms1180 KiB
13Elfogadva6ms564 KiB
14Elfogadva2ms316 KiB
15Elfogadva190ms4660 KiB
16Elfogadva212ms5252 KiB
17Elfogadva56ms2112 KiB
18Elfogadva57ms2356 KiB
subtask40/15
19Időlimit túllépés1.077s16232 KiB
20Időlimit túllépés1.077s8500 KiB
21Elfogadva630ms2612 KiB
22Elfogadva43ms748 KiB
23Elfogadva43ms564 KiB
24Elfogadva24ms564 KiB
25Időlimit túllépés1.082s8560 KiB
26Időlimit túllépés1.082s8600 KiB
27Időlimit túllépés1.082s24108 KiB
28Időlimit túllépés1.083s24040 KiB
29Elfogadva82ms844 KiB
30Elfogadva82ms820 KiB
31Időlimit túllépés1.085s5288 KiB
32Időlimit túllépés1.083s4148 KiB
33Időlimit túllépés1.092s12340 KiB
34Időlimit túllépés1.092s12308 KiB
35Időlimit túllépés1.085s8432 KiB
36Időlimit túllépés1.083s8244 KiB
37Elfogadva651ms3368 KiB
38Elfogadva634ms2612 KiB
subtask50/60
39Futási hiba2ms316 KiB
40Futási hiba2ms316 KiB
41Futási hiba1ms316 KiB
42Futási hiba1ms564 KiB
43Futási hiba2ms316 KiB
44Futási hiba1ms316 KiB
45Futási hiba1ms316 KiB
46Futási hiba1ms316 KiB
47Futási hiba1ms316 KiB
48Futási hiba1ms508 KiB
49Futási hiba1ms316 KiB
50Futási hiba1ms316 KiB
51Futási hiba2ms316 KiB
52Futási hiba2ms508 KiB
53Futási hiba2ms316 KiB
54Futási hiba2ms316 KiB
55Időlimit túllépés1.082s1332 KiB
56Futási hiba1ms316 KiB
57Futási hiba1ms316 KiB
58Futási hiba1ms316 KiB
59Futási hiba3ms568 KiB
60Futási hiba1ms316 KiB
61Időlimit túllépés1.1s2612 KiB
62Futási hiba1ms316 KiB
63Futási hiba3ms568 KiB
64Futási hiba1ms508 KiB
65Futási hiba3ms564 KiB
66Futási hiba1ms316 KiB
67Futási hiba3ms568 KiB
68Futási hiba1ms316 KiB
69Futási hiba3ms564 KiB
70Futási hiba1ms316 KiB
71Futási hiba12ms8500 KiB