247862026-02-15 10:32:35CzDaniMI bróker (50 pont)cpp17Hibás válasz 2/50611ms26420 KiB
#include <bits/stdc++.h>
using namespace std;

int 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, 501));
        it--;
        cout << it->second + lower_bound(dpv[a].begin(), dpv[a].end(), make_pair(b, -501))->second << endl;
        // cout << a << ' ' << b << ' ' << lower_bound(dpv[a].begin(), dpv[a].end(), make_pair(b, -502))->second << endl;
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base2/50
1Elfogadva0/01ms540 KiB
2Hibás válasz0/0432ms15924 KiB
3Elfogadva1/11ms316 KiB
4Elfogadva1/11ms500 KiB
5Hibás válasz0/214ms1852 KiB
6Hibás válasz0/2238ms16032 KiB
7Hibás válasz0/2241ms16692 KiB
8Hibás válasz0/1293ms820 KiB
9Hibás válasz0/1368ms9012 KiB
10Hibás válasz0/2472ms26420 KiB
11Hibás válasz0/2437ms20788 KiB
12Hibás válasz0/2449ms23096 KiB
13Hibás válasz0/2437ms22744 KiB
14Hibás válasz0/2442ms22564 KiB
15Hibás válasz0/3611ms18228 KiB
16Hibás válasz0/3610ms17968 KiB
17Hibás válasz0/3602ms18484 KiB
18Hibás válasz0/3600ms17972 KiB
19Hibás válasz0/3611ms18484 KiB
20Hibás válasz0/3606ms18228 KiB
21Hibás válasz0/3601ms17968 KiB
22Hibás válasz0/3598ms18228 KiB
23Hibás válasz0/3603ms18228 KiB
24Hibás válasz0/3601ms18228 KiB