#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
int left(int i) {return 2*i;}
int right(int i) {return 2*i+1;}
int parent(int i) {return i/2;}
struct Antenna {
int h, a, b, i;
};
struct SegmentTreem {
int n, nn;
vector<int> st;
SegmentTreem(int n) : n(n), nn(1 << (int)ceil(log2(n))), st(4*n, 1e9+1) {}
int query(int l, int r, int a = 1, int b = -1, int i = 1) {
if (b==-1) {b = nn;}
if (l <= a && b <= r) {
return st[i];
}
if (l > b || a > r) {return 1e9+1;}
int mid = (a+b)/2;
return min(query(l, r, a, mid, left(i)), query(l, r, mid+1, b, right(i)));
}
void update(int i, int v) {
i = nn+i-1;
st[i] = v;
for (i = parent(i); i > 0; i = parent(i)) {
st[i] = min(st[left(i)], st[right(i)]);
}
}
};
struct SegmentTreeM {
int n, nn;
vector<int> st;
SegmentTreeM(int n) : n(n), nn(1 << (int)ceil(log2(n))), st(4*n, -1) {}
int query(int l, int r, int a = 1, int b = -1, int i = 1) {
if (b==-1) {b = nn;}
if (l <= a && b <= r) {
return st[i];
}
if (l > b || a > r) {return -1;}
int mid = (a+b)/2;
return max(query(l, r, a, mid, left(i)), query(l, r, mid+1, b, right(i)));
}
void update(int i, int v) {
i = nn+i-1;
st[i] = v;
for (i = parent(i); i > 0; i = parent(i)) {
st[i] = max(st[left(i)], st[right(i)]);
}
}
};
void solve() {
int N;
cin >> N;
vector<Antenna> an(N+1);
int h, a, b;
for (int i = 1; i <= N; i++)
{
cin >> h >> a >> b;
an[i] = Antenna {h, a, b, i};
}
int q;
cin >> q;
int l, r;
for (int i = 0; i < q; i++)
{
cin >> l >> r;
}
SegmentTreem stm(N);
SegmentTreeM stM(N);
priority_queue<pii, vector<pii>, greater<pii>> pq_a;
priority_queue<pii, vector<pii>, greater<pii>> pq_b;
for (int i = 1; i < N+1; i++)
{
auto a = an[i];
pq_a.push({a.i-a.b, a.i});
pq_a.push({a.i+a.a, a.i});
pq_b.push({a.i-a.a, a.i});
pq_b.push({a.i+a.b, a.i});
}
int cmax = -1;
for (int i = 1; i < N+1; i++)
{
while (!pq_a.empty() && pq_a.top().first <= i)
{
auto cur = pq_a.top();pq_a.pop();
stm.update(cur.second, an[cur.second].h);
stM.update(cur.second, an[cur.second].h);
}
while (!pq_b.empty() && pq_b.top().first < i)
{
auto tod = pq_b.top();pq_b.pop();
stm.update(tod.second, 1e9+1);
stM.update(tod.second, -1);
}
auto cur = an[i];
int m1 = 1e9+1;int m2 = 1e9+1;
int M1 = -1;int M2 = -1;
if (cur.i-cur.a >= 1) {
m1 = stm.query(max(1, cur.i-cur.b), cur.i-cur.a);
M1 = stM.query(max(1, cur.i-cur.b), cur.i-cur.a);
}
if (cur.i+cur.a <= N) {
m2 = stm.query(cur.i+cur.a, min(N, cur.i+cur.b));
M2 = stM.query(cur.i+cur.a, min(N, cur.i+cur.b));
}
if (m1 != 1e9+1) {
cmax = max(cmax, max(abs(m1-cur.h), abs(M1-cur.h)));
}
if (m2 != 1e9+1) {
cmax = max(cmax, max(abs(m2-cur.h), abs(M2-cur.h)));
}
}
cout << cmax << endl;
}
int main() {
cin.tie(0);
ios::sync_with_stdio(0);
solve();
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
1 ms |
212 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
1 ms |
212 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
411 ms |
15144 KB |
Output is correct |
2 |
Correct |
395 ms |
16204 KB |
Output is correct |
3 |
Correct |
311 ms |
13248 KB |
Output is correct |
4 |
Correct |
378 ms |
16200 KB |
Output is correct |
5 |
Correct |
155 ms |
7892 KB |
Output is correct |
6 |
Correct |
467 ms |
16212 KB |
Output is correct |
7 |
Correct |
329 ms |
14788 KB |
Output is correct |
8 |
Correct |
424 ms |
16224 KB |
Output is correct |
9 |
Correct |
50 ms |
3016 KB |
Output is correct |
10 |
Correct |
429 ms |
16212 KB |
Output is correct |
11 |
Correct |
240 ms |
10328 KB |
Output is correct |
12 |
Correct |
435 ms |
16216 KB |
Output is correct |
13 |
Correct |
288 ms |
16200 KB |
Output is correct |
14 |
Correct |
268 ms |
16100 KB |
Output is correct |
15 |
Correct |
250 ms |
16292 KB |
Output is correct |
16 |
Correct |
258 ms |
16100 KB |
Output is correct |
17 |
Correct |
276 ms |
16104 KB |
Output is correct |
18 |
Correct |
274 ms |
16208 KB |
Output is correct |
19 |
Correct |
262 ms |
16104 KB |
Output is correct |
20 |
Correct |
261 ms |
16100 KB |
Output is correct |
21 |
Correct |
273 ms |
16208 KB |
Output is correct |
22 |
Correct |
288 ms |
16204 KB |
Output is correct |
23 |
Correct |
275 ms |
16212 KB |
Output is correct |
24 |
Correct |
248 ms |
16292 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
1 ms |
212 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |