166522025-05-07 18:20:55algoproMaximum felosztáscpp17Runtime error 40/1001.098s262144 KiB
// UUID: b71e3113-f5d3-4650-9c90-6a136d50d687
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const int MAXN = 100'001;
const ll INF = 1e15;
const ll MOD = 1e9+7;

ll a[MAXN], b[MAXN];
vector<pair<ll, ll>> pref[MAXN];
map<ll, ll> 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].emplace_back(0, 1);
    for (int i = 1; i <= m; i++) {
        pref[i].emplace_back(0, 0);
    }
    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]])) {
                ll idx = value_to_bidx[a[st[j]]];
                
                ll l = st[j-1]+1, r = st[j];
                auto it1 = upper_bound(pref[idx-1].begin(), pref[idx-1].end(), make_pair(r-1, INF));
                auto it2 = lower_bound(pref[idx-1].begin(), pref[idx-1].end(), make_pair(l-1, 0ll));

                ll val1 = 0;
                ll val2 = 0;
                if (it1 != pref[idx-1].begin()) {
                    it1--;
                    val1 = it1->second;
                }
                if (it2 != pref[idx-1].begin()) {
                    it2--;
                    val2 = it2->second;
                }
                dp[idx] = val1 - val2;
                dp[idx] %= MOD;
            }
        }

        for (int b = 0; b <= m; b++) {
            pref[b].emplace_back(i, pref[b].back().second + 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
1Accepted3ms2660 KiB
2Accepted32ms18996 KiB
subtask210/10
3Accepted3ms2612 KiB
4Accepted4ms2612 KiB
5Accepted3ms2612 KiB
6Accepted3ms2628 KiB
7Accepted3ms2612 KiB
8Accepted3ms2612 KiB
subtask315/15
9Accepted7ms4404 KiB
10Accepted4ms3572 KiB
11Accepted4ms3636 KiB
12Accepted4ms3124 KiB
13Accepted3ms2868 KiB
14Accepted3ms2612 KiB
15Accepted8ms5688 KiB
16Accepted32ms5544 KiB
17Accepted4ms3956 KiB
18Accepted13ms3964 KiB
subtask415/15
19Accepted59ms35120 KiB
20Accepted30ms18992 KiB
21Accepted10ms6196 KiB
22Accepted4ms3136 KiB
23Accepted4ms3124 KiB
24Accepted4ms2868 KiB
25Accepted35ms18964 KiB
26Accepted28ms18932 KiB
27Accepted796ms51000 KiB
28Accepted82ms50996 KiB
29Accepted8ms3380 KiB
30Accepted4ms3380 KiB
31Accepted71ms9268 KiB
32Accepted10ms9184 KiB
33Accepted328ms26932 KiB
34Accepted52ms27012 KiB
35Accepted233ms18996 KiB
36Accepted34ms19000 KiB
37Accepted32ms6196 KiB
38Accepted8ms6196 KiB
subtask50/60
39Runtime error671ms262144 KiB
40Runtime error554ms262144 KiB
41Runtime error435ms262144 KiB
42Runtime error430ms262144 KiB
43Runtime error433ms262144 KiB
44Runtime error430ms262144 KiB
45Runtime error675ms262144 KiB
46Runtime error624ms262144 KiB
47Runtime error501ms262144 KiB
48Runtime error497ms262144 KiB
49Runtime error625ms262144 KiB
50Runtime error625ms262144 KiB
51Runtime error536ms262144 KiB
52Accepted501ms164248 KiB
53Accepted331ms84488 KiB
54Accepted277ms84584 KiB
55Accepted101ms21852 KiB
56Runtime error486ms262144 KiB
57Runtime error620ms262144 KiB
58Runtime error509ms262144 KiB
59Runtime error624ms262144 KiB
60Time limit exceeded1.098s121084 KiB
61Accepted462ms164092 KiB
62Runtime error505ms262144 KiB
63Runtime error620ms262144 KiB
64Runtime error639ms262144 KiB
65Runtime error490ms262144 KiB
66Runtime error640ms262144 KiB
67Runtime error495ms262144 KiB
68Runtime error512ms262144 KiB
69Runtime error624ms262144 KiB
70Runtime error470ms262144 KiB
71Runtime error541ms262144 KiB