247882026-02-15 10:33:46CzDaniMI bróker (50 pont)cpp17Wrong answer 2/50652ms45112 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

signed main() {
    int n, q;
    cin >> n >> q;
    vector<int> v(n+1);
    for (int i = 1; i <= n; i++) {
        cin >> v[i];
    }
    vector<vector<pair<int, int>>> dpv(501), dpe(501);
    //stat: 1:mar johet a kovi vetel (k feletti reszben vagyunk mar) 0: meg nem jott k-nal magasabb a legutobbi vetel ota
    for (int k = 1; k <= 500; k++) {
        int stat = 1, maxi = 501;
        for (int i = 1; i <= n; i++) {
            if (stat==1&&v[i]<=k) {
                dpv[k].push_back({maxi, -v[i]});
                stat=0;
                maxi=0;
            } else if (stat==1) {
                maxi=max(maxi,v[i]);
            } else if (stat==0&&v[i]>k) {
                maxi=v[i];
                stat=1;
            }
            if (k==40) {
                // cout << i << ": " << stat << ' ' << maxi << endl;
            }
        }
        sort(dpv[k].begin(), dpv[k].end());
        dpv[k].push_back({502, 0});
        int m = dpv[k].size();
        for (int i = m-2; i >= 0; i--) {
            dpv[k][i]={dpv[k][i].first, dpv[k][i].second+dpv[k][i+1].second};
        }
    }
    //stat: 1: mar johet az eladas (szval k alatti reszben voltunk eddig), 0: eddig nem jott knal nagyobb egyenlo
    for (int k = 1; k <= 500; k++) {
        int stat = 0, mini = 501;
        for (int i = 1; i <= n; i++) {
            if (stat==1&&v[i]>=k) {
                dpe[k].push_back({mini, v[i]});
                stat=0;
                mini=501;
            } else if (stat==1) {
                mini=min(mini,v[i]);
            } else if (stat==0&&v[i]<k) {
                mini=v[i];
                stat=1;
            }
            if (k==120) {
                //cout << i << ": " << stat << ' ' << mini << endl;
            }
        }
        dpe[k].push_back({0, 0});
        sort(dpe[k].begin(), dpe[k].end());
        int m = dpe[k].size();
        for (int i = 1; i < m; i++) {
            dpe[k][i] = {dpe[k][i].first, dpe[k][i].second + dpe[k][i-1].second};
        }
    }
    // for (int i = 0; i < dpv[40].size(); i++)cout<<dpv[40][i].first << ' ' << dpv[40][i].second << endl;
    // for (int i = 0; i < dpe[120].size(); i++)cout<<dpe[120][i].first << ' ' << dpe[120][i].second << endl;
    while (q--) {
        int a, b;
        cin >> a >> b;
        auto it = upper_bound(dpe[b].begin(), dpe[b].end(), make_pair(a, 501LL));
        it--;
        cout << it->second + lower_bound(dpv[a].begin(), dpv[a].end(), make_pair(b, -501LL))->second << endl;
        // cout << a << ' ' << b << ' ' << lower_bound(dpv[a].begin(), dpv[a].end(), make_pair(b, -502))->second << endl;
    }
}
SubtaskSumTestVerdictTimeMemory
base2/50
1Accepted0/01ms508 KiB
2Wrong answer0/0467ms27692 KiB
3Accepted1/11ms316 KiB
4Accepted1/11ms500 KiB
5Wrong answer0/217ms3596 KiB
6Wrong answer0/2248ms29724 KiB
7Wrong answer0/2259ms29964 KiB
8Wrong answer0/1303ms956 KiB
9Wrong answer0/1368ms15068 KiB
10Wrong answer0/2492ms45112 KiB
11Wrong answer0/2460ms35120 KiB
12Wrong answer0/2465ms39732 KiB
13Wrong answer0/2448ms40236 KiB
14Wrong answer0/2449ms38724 KiB
15Wrong answer0/3634ms31020 KiB
16Wrong answer0/3634ms30772 KiB
17Wrong answer0/3652ms30824 KiB
18Wrong answer0/3638ms30636 KiB
19Wrong answer0/3651ms31128 KiB
20Wrong answer0/3652ms30516 KiB
21Wrong answer0/3642ms30872 KiB
22Wrong answer0/3643ms30904 KiB
23Wrong answer0/3638ms30752 KiB
24Wrong answer0/3634ms31028 KiB