# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
165262 | Bojack | Triple Jump (JOI19_jumps) | C++14 | 71 ms | 7272 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve() {
int n; scanf("%d", &n);
vector <int> a(n);
for(int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int q; scanf("%d", &q);
while(q--) {
int l, r; scanf("%d", &l, &r);
}
stack <pair<int, int>> s;
vector <pair <int, int>> can;
for(int i = n - 1; i >= 0; i--) {
while(!s.empty() and s.top().first < a[i]) {
s.pop();
}
if(s.empty()) {
} else {
can.push_back({i, s.top().second});
}
s.push({a[i], i});
}
while(!s.empty()) s.pop();
for(int i = 0; i < n; i++) {
while(!s.empty() and s.top().first < a[i]) {
s.pop();
}
if(s.empty()) {
} else {
can.push_back({s.top().second, i});
}
s.push({a[i], i});
}
vector <int> mx(n);
mx[n - 1] = a[n - 1];
for(int i = n - 2; i >= 0; i--) {
mx[i] = max(mx[i + 1], a[i]);
}
int ans = 0;
for(auto p : can) {
int i = p.first;
int j = p.second;
if(i > j) swap(i, j);
if(j + j - i < n) ans = max(ans, a[i] + a[j] + mx[j + j - i]);
}
printf("%d\n", ans);
}
int main() {
solve();
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |