#include "towers.h"
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
int n;
vector<int> h;
set<int> st;
priority_queue<pair<int, pii> > pq;
vector<pii> q;
void init(int N, std::vector<int> H) {
n = N; h = H;
st.insert(0); st.insert(N - 1);
for(int i = 1; i < N - 1; ++i) {
if(h[i - 1] < h[i] && h[i] > h[i + 1]) st.insert(i);
if(h[i - 1] > h[i] && h[i] < h[i + 1]) st.insert(i);
}
if(st.size() >= 2 && H[*st.begin()] > H[*next(st.begin())]) st.erase(st.begin());
if(st.size() >= 2 && H[*st.rbegin()] > H[*next(st.rbegin())]) st.erase(prev(st.end()));
for(auto it = st.begin(); it != st.end(); ++it) {
if(it == st.end()) break;
pq.push({-abs(H[*it] - H[*next(it)]), {*it, *next(it)}});
}
q.push_back({0, (st.size() - 1) / 2 + 1});
while(!pq.empty()) {
int D = -pq.top().first;
while(!pq.empty() && -pq.top().first == D) {
int i = pq.top().second.first, j = pq.top().second.second;
pq.pop();
st.erase(st.find(i));
st.erase(st.find(j));
if(!st.empty() && *st.begin() < i && *st.rbegin() > j) {
int prv = *prev(st.lower_bound(i));
int nxt = *st.lower_bound(j);
pq.push({-abs(H[prv] - H[nxt]), {prv, nxt}});
assert(abs(H[prv] - H[nxt]) >= D);
}
}
// cout << D << " : ";
// for(auto it : st) cout << it << ' ';
// cout << endl;
q.push_back({D, (st.size() - 1) / 2 + 1});
while(!pq.empty()) {
int i = pq.top().second.first, j = pq.top().second.second;
if(st.find(i) == st.end() || st.find(j) == st.end()) pq.pop();
else break;
}
}
}
int max_towers(int l, int r, int d) {
pii p = {d, -1};
int i = prev(lower_bound(q.begin(), q.end(), p)) - q.begin();
return q[i].second;
}
/*
7 3
10 20 60 40 50 30 70
1 5 10
2 2 100
0 6 17
8 4
20 10 40 30 40 20 30 10
0 6 1
0 6 10
0 6 20
0 6 30
7 3
10 30 20 30 20 30 20
0 5 1
0 5 10
0 5 20
*/
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
9 ms |
1744 KB |
Execution killed with signal 6 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1 ms |
464 KB |
Execution killed with signal 6 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1 ms |
464 KB |
Execution killed with signal 6 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
569 ms |
6148 KB |
1st lines differ - on the 1st token, expected: '11903', found: '33010' |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
301 ms |
1616 KB |
Output is correct |
2 |
Runtime error |
44 ms |
10936 KB |
Execution killed with signal 6 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1 ms |
464 KB |
Execution killed with signal 6 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
9 ms |
1744 KB |
Execution killed with signal 6 |
2 |
Halted |
0 ms |
0 KB |
- |