Submission #489462

#TimeUsernameProblemLanguageResultExecution timeMemory
489462Haruto810198Triple Jump (JOI19_jumps)C++17
19 / 100
428 ms127784 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define double long double #define FOR(i, l, r, d) for(int i=(l); i<=(r); i+=(d)) #define szof(x) ((int)(x).size()) #define vi vector<int> #define pii pair<int, int> #define F first #define S second #define pb push_back #define eb emplace_back #define mkp make_pair const int INF = INT_MAX; const int LNF = INF*INF; const int MOD = 1000000007; const int MAX = 5010; int n, q; int arr[MAX]; int st[MAX][20]; int res[MAX][MAX]; int query(int l, int r){ int rk = __lg(r - l + 1); return max(st[l][rk], st[r - (1<<rk) + 1][rk]); } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n; FOR(i, 1, n, 1){ cin>>arr[i]; } FOR(i, 1, n, 1){ st[i][0] = arr[i]; } FOR(j, 1, 19, 1){ FOR(i, 1, n, 1){ int ii = i + (1<<(j - 1)); if(ii <= n) st[i][j] = max(st[i][j - 1], st[ii][j - 1]); else st[i][j] = st[i][j - 1]; } } FOR(i, 1, n, 1){ FOR(k, i + 2, n, 1){ int j = (i + k) / 2; res[i][k] = arr[i] + query(i + 1, j) + arr[k]; } } FOR(dis, 3, n - 1, 1){ FOR(i, 1, n - dis, 1){ int j = i + dis; res[i][j] = max({res[i][j], res[i + 1][j], res[i][j - 1]}); //cerr<<"res["<<i<<"]["<<j<<"] = "<<res[i][j]<<endl; } } cin>>q; while(q--){ int l, r; cin>>l>>r; cout<<res[l][r]<<'\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...