166482025-05-07 18:11:40algoproMaximum felosztáscpp17Futási hiba 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
2Elfogadva14ms8256 KiB
subtask210/10
3Elfogadva1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms316 KiB
8Elfogadva1ms316 KiB
subtask315/15
9Elfogadva3ms1844 KiB
10Elfogadva2ms1260 KiB
11Elfogadva2ms1076 KiB
12Elfogadva2ms820 KiB
13Elfogadva1ms564 KiB
14Elfogadva1ms316 KiB
15Elfogadva4ms3124 KiB
16Elfogadva9ms3124 KiB
17Elfogadva2ms1588 KiB
18Elfogadva3ms1588 KiB
subtask415/15
19Elfogadva30ms15972 KiB
20Elfogadva16ms8204 KiB
21Elfogadva3ms1844 KiB
22Elfogadva2ms400 KiB
23Elfogadva2ms564 KiB
24Elfogadva1ms316 KiB
25Elfogadva13ms8240 KiB
26Elfogadva13ms8348 KiB
27Elfogadva301ms23868 KiB
28Elfogadva41ms23860 KiB
29Elfogadva2ms564 KiB
30Elfogadva2ms564 KiB
31Elfogadva14ms3620 KiB
32Elfogadva4ms3620 KiB
33Elfogadva107ms12104 KiB
34Elfogadva17ms12152 KiB
35Elfogadva86ms8244 KiB
36Elfogadva10ms8204 KiB
37Elfogadva4ms1844 KiB
38Elfogadva3ms2040 KiB
subtask50/60
39Futási hiba1ms316 KiB
40Futási hiba1ms316 KiB
41Futási hiba1ms500 KiB
42Futási hiba1ms564 KiB
43Futási hiba1ms512 KiB
44Futási hiba1ms316 KiB
45Futási hiba1ms316 KiB
46Futási hiba2ms316 KiB
47Futási hiba1ms316 KiB
48Futási hiba1ms316 KiB
49Futási hiba2ms508 KiB
50Futási hiba1ms316 KiB
51Futási hiba1ms316 KiB
52Futási hiba1ms316 KiB
53Futási hiba1ms316 KiB
54Futási hiba1ms316 KiB
55Futási hiba3ms564 KiB
56Futási hiba1ms320 KiB
57Futási hiba2ms316 KiB
58Futási hiba2ms316 KiB
59Futási hiba3ms564 KiB
60Futási hiba1ms316 KiB
61Futási hiba6ms2100 KiB
62Futási hiba1ms316 KiB
63Futási hiba3ms568 KiB
64Futási hiba1ms316 KiB
65Futási hiba3ms564 KiB
66Futási hiba1ms316 KiB
67Futási hiba3ms564 KiB
68Futási hiba1ms316 KiB
69Futási hiba3ms564 KiB
70Futási hiba1ms316 KiB
71Futási hiba2ms580 KiB