166522025-05-07 18:20:55algoproMaximum felosztáscpp17Futási hiba 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms2660 KiB
2Elfogadva32ms18996 KiB
subtask210/10
3Elfogadva3ms2612 KiB
4Elfogadva4ms2612 KiB
5Elfogadva3ms2612 KiB
6Elfogadva3ms2628 KiB
7Elfogadva3ms2612 KiB
8Elfogadva3ms2612 KiB
subtask315/15
9Elfogadva7ms4404 KiB
10Elfogadva4ms3572 KiB
11Elfogadva4ms3636 KiB
12Elfogadva4ms3124 KiB
13Elfogadva3ms2868 KiB
14Elfogadva3ms2612 KiB
15Elfogadva8ms5688 KiB
16Elfogadva32ms5544 KiB
17Elfogadva4ms3956 KiB
18Elfogadva13ms3964 KiB
subtask415/15
19Elfogadva59ms35120 KiB
20Elfogadva30ms18992 KiB
21Elfogadva10ms6196 KiB
22Elfogadva4ms3136 KiB
23Elfogadva4ms3124 KiB
24Elfogadva4ms2868 KiB
25Elfogadva35ms18964 KiB
26Elfogadva28ms18932 KiB
27Elfogadva796ms51000 KiB
28Elfogadva82ms50996 KiB
29Elfogadva8ms3380 KiB
30Elfogadva4ms3380 KiB
31Elfogadva71ms9268 KiB
32Elfogadva10ms9184 KiB
33Elfogadva328ms26932 KiB
34Elfogadva52ms27012 KiB
35Elfogadva233ms18996 KiB
36Elfogadva34ms19000 KiB
37Elfogadva32ms6196 KiB
38Elfogadva8ms6196 KiB
subtask50/60
39Futási hiba671ms262144 KiB
40Futási hiba554ms262144 KiB
41Futási hiba435ms262144 KiB
42Futási hiba430ms262144 KiB
43Futási hiba433ms262144 KiB
44Futási hiba430ms262144 KiB
45Futási hiba675ms262144 KiB
46Futási hiba624ms262144 KiB
47Futási hiba501ms262144 KiB
48Futási hiba497ms262144 KiB
49Futási hiba625ms262144 KiB
50Futási hiba625ms262144 KiB
51Futási hiba536ms262144 KiB
52Elfogadva501ms164248 KiB
53Elfogadva331ms84488 KiB
54Elfogadva277ms84584 KiB
55Elfogadva101ms21852 KiB
56Futási hiba486ms262144 KiB
57Futási hiba620ms262144 KiB
58Futási hiba509ms262144 KiB
59Futási hiba624ms262144 KiB
60Időlimit túllépés1.098s121084 KiB
61Elfogadva462ms164092 KiB
62Futási hiba505ms262144 KiB
63Futási hiba620ms262144 KiB
64Futási hiba639ms262144 KiB
65Futási hiba490ms262144 KiB
66Futási hiba640ms262144 KiB
67Futási hiba495ms262144 KiB
68Futási hiba512ms262144 KiB
69Futási hiba624ms262144 KiB
70Futási hiba470ms262144 KiB
71Futási hiba541ms262144 KiB