Submission #1253373

#TimeUsernameProblemLanguageResultExecution timeMemory
1253373ankiteTriple Jump (JOI19_jumps)C++20
5 / 100
4094 ms125344 KiB
#include <bits/stdc++.h>;
#define int long long
using namespace std;
using pii = pair<int, int>;

const int li = 5e5 + 10;
void print() { cerr << '\n'; }
template<typename T, typename... Args>
void print(T first, Args... rest) {
    cerr << first << ' ';
    print(rest...);
}

int n, a[li], q;
pii Q[li];

void solve1() {
    for (int i=1; i<=q; i++) {
        int l = Q[i].first, r = Q[i].second;
        int ans = 0;

        for (int z=l+2; z<=r; z++) {
            for (int x=l; x<=z-2; x++) {
                for (int y=x+1; y - x <= z - y; y++) {
                    ans = max(ans, a[x] + a[y] + a[z]);
                }
            }
        }

        cout << ans << '\n';
    }
}

int seg[li * 4];
int left(int id) { return (id << 1); }
int right(int id) { return (id << 1 | 1); }
void build(int id = 1, int l = 1, int r = n) {
    if (l == r) { seg[id] = a[l]; return; }

    int mid = (l + r) >> 1;
    build(left(id), l, mid);
    build(right(id), mid + 1, r);

    seg[id] = max(seg[left(id)], seg[right(id)]);
}
int get(int lo, int hi, int id = 1, int l = 1, int r = n) {
    if (r < lo  ||  l > hi) return 0;
    if (l >= lo  &&  r <= hi) return seg[id];

    int mid = (l + r) >> 1;
    return max(get(lo, hi, left(id), l, mid), get(lo, hi, right(id), mid + 1, r));
}

int pre[5001][5001];
void solve2() {
    build();
    for (int x=1; x<=n-2; x++) {
        for (int z = x + 2; z<=n; z++) {
            pre[x][z] = get(x + 1, ((z + x) >> 1)) + a[x] + a[z];
        }
    }

    for (int i=1; i<=q; i++) {
        int l = Q[i].first, r = Q[i].second;
        int ans = 0;
        for (int z=l+2; z<=r; z++) {
            for (int x=l; x<=z-2; x++) {
                ans = max(ans, pre[x][z]);
            }
        }

        cout << ans << '\n';
    }
}

signed main(){
    cin >> n;
    for (int i=1; i<=n; i++) cin >> a[i];
    cin >> q;
    for (int i=1; i<=q; i++) cin >> Q[i].first >> Q[i].second;
    solve2();

    return 0;
}

Compilation message (stderr)

jumps.cpp:1:25: warning: extra tokens at end of #include directive
    1 | #include <bits/stdc++.h>;
      |                         ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...