93672024-02-21 10:08:29szilMI bróker (50 pont)cpp17Időlimit túllépés 4/501.1s8680 KiB
#include <bits/stdc++.h>

using ll = long long;
using namespace std;

const int MAXN = 10'001;

int a[MAXN], ans[MAXN][MAXN];
vector<int> pos[501];

void solve() {
    int n, m; cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        pos[a[i]].emplace_back(i);
    }
    for (int l = 1; l <= 500; l++) {
        set<pair<int, bool>> indices, points;
        for (int i = 1; i <= n; i++) {
            if (a[i] <= l) {
                indices.insert({i, false});
                points.insert({i, true});
            }
        }
        if (indices.empty()) continue;
        int idx = indices.begin()->first;
        indices.erase(indices.begin());
        int cost = a[idx];
        indices.insert({idx, true});
        for (int r = 500; r >= l+1; r--) {
            for (int i : pos[r]) {
                auto it = indices.lower_bound({i, false});
                if (it != indices.end() && !it->second) {
                    idx = it->first;
                    indices.erase(it);
                    indices.insert({idx, true});
                    cost += a[idx];
                }

                auto bef = points.lower_bound({i, false});
                if (bef != points.begin()) {
                    bef--;
                    if (bef->second) {
                        cost -= a[i];
                        auto nxt = points.lower_bound({i, false});
                        if (nxt != points.end() && !nxt->second) {
                            cost += a[nxt->first];
                            points.erase(nxt);
                        }
                        points.insert({i, false});
                    }
                }
                
            }
            ans[l][r] = cost;
        }
    }
    while (m--) {
        int a, b; cin >> a >> b;
        cout << -ans[a][b] << "\n";
    }
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    int t = 1;
    // cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base4/50
1Elfogadva0/06ms6596 KiB
2Időlimit túllépés0/01.1s3988 KiB
3Elfogadva1/14ms4964 KiB
4Elfogadva1/14ms6500 KiB
5Elfogadva2/2136ms8108 KiB
6Időlimit túllépés0/21.078s4652 KiB
7Időlimit túllépés0/21.057s4912 KiB
8Időlimit túllépés0/11.024s8680 KiB
9Időlimit túllépés0/11.023s5468 KiB
10Időlimit túllépés0/21.065s5552 KiB
11Időlimit túllépés0/21.059s5504 KiB
12Időlimit túllépés0/21.059s5808 KiB
13Időlimit túllépés0/21.055s5872 KiB
14Időlimit túllépés0/21.078s5760 KiB
15Időlimit túllépés0/31.067s5764 KiB
16Időlimit túllépés0/31.049s5912 KiB
17Időlimit túllépés0/31.059s6052 KiB
18Időlimit túllépés0/31.07s5820 KiB
19Időlimit túllépés0/31.07s5896 KiB
20Időlimit túllépés0/31.082s5836 KiB
21Időlimit túllépés0/31.082s6032 KiB
22Időlimit túllépés0/31.067s6340 KiB
23Időlimit túllépés0/31.059s6352 KiB
24Időlimit túllépés0/31.087s6368 KiB