Submission #1297964

#TimeUsernameProblemLanguageResultExecution timeMemory
1297964TrieTrTwo Antennas (JOI19_antennas)C++20
13 / 100
57 ms7280 KiB
#include<bits/stdc++.h>
using namespace std;

void local() {
    #define taskname ""
    if (fopen(taskname".inp", "r")) {
        freopen(taskname".inp", "r", stdin);
        freopen(taskname".out", "w", stdout);
    }
}

#define ll long long
#define fi first
#define se second
#define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

template<class X, class Y> bool mini(X &a, const Y &b) {return (a > b) ? a = b, true : false;}
template<class X, class Y> bool maxi(X &a, const Y &b) {return (a < b) ? a = b, true : false;}

const int N = 2e5 + 5;

int n;
int h[N], a[N], b[N];
int q;
pair<int, int> que[N];

namespace sub2 {
	bool check() {
		return n <= 2e3;
	}

	struct SegmentTree {
		using T = int;
		vector<T> st;
		int n;
		void init(int n_) {
			n = n_;
			st.assign((n + 5) << 2, -2e9 - 1);
		}
		void update(int x, int v, int l, int r, int id) {
			if(l > x || r < x) return;
			if(l == r) {
				maxi(st[id], v);
				return;
			}
			int mid = (l + r) >> 1;
			update(x, v, l, mid, id << 1); update(x, v, mid + 1, r, id << 1 | 1);
			st[id] = max(st[id << 1], st[id << 1 | 1]);
		}
		T get(int x, int y, int l, int r, int id) {
			if(l > y  || r < x) return -2e9 - 1;
			if(l >= x && r <= y) return st[id];
			int mid = (l + r) >> 1;
			return max(get(x, y, l, mid, id << 1), get(x, y, mid + 1, r, id << 1 | 1));
		}
	};

	vector<pair<int, int>> event[N];
	bool isin(int i, int x, int y) {
		return x <= i && i <= y;
	}
	int ans[N];
	void solve() {
		for(int i = 1; i <= q; i++) {
			auto[l, r] = que[i];
			event[r].emplace_back(l, i);
		}
		SegmentTree T;
		T.init(n);
		for(int i = 1; i <= n; i++) {
			for(int j = 1; j < i; j++) {
				if(isin(abs(i - j), a[j], b[j]) && isin(abs(i - j), a[i], b[i])) {
					T.update(j, abs(h[i] - h[j]), 1, n, 1);
				}
			}
			for(auto[l, id] : event[i]) {
				ans[id] = T.get(l, i, 1, n, 1);
			}
		}
		for(int i = 1; i <= q; i++) cout << (ans[i] == -2e9 - 1 ? -1 : ans[i]) << '\n';
	}
}

namespace sub3 {
	bool check() {
		return n <= 2e3;
	}
	struct SegmentTree {
		using T = pair<int, int>;
		vector<T> st;
		vector<int> lazy;
		int n;
		void init(int n_) {
			n = n_;
			st.assign((n + 5) << 2, make_pair(1e9 + 1, -1e9 - 1));
			lazy.assign((n + 5) << 2, -1);
		}
		T merge(T a, T b) {
			pair<int, int> c;
			c.fi = min(a.fi, b.fi);
			c.se = max(a.se, b.se);
			return c;
		}
		void down(int id) {
			if(lazy[id] == -1) return;
			mini(st[id << 1].fi, lazy[id]);
			maxi(st[id << 1].se, lazy[id]);
			lazy[id << 1] = lazy[id];
			mini(st[id << 1 | 1].fi, lazy[id]);
			maxi(st[id << 1 | 1].se, lazy[id]);
			lazy[id << 1 | 1] = lazy[id];
			lazy[id] = -1;
		}
		void update(int x, int y, int v, int l, int r, int id) {
			if(l > y || r < x) return;
			if(l >= x && r <= y) {
				mini(st[id].fi, v);
				maxi(st[id].se, v);
				lazy[id] = v;
				return;
			}
			int mid = (l + r) >> 1; down(id);
			update(x, y, v, l, mid, id << 1); update(x, y, v, mid + 1, r, id << 1 | 1);
			st[id] = merge(st[id << 1], st[id << 1 | 1]);
		}
		T get(int x, int y, int l, int r, int id) {
			if(l > y  || r < x) return make_pair(1e9 + 1, -1e9 - 1);
			if(l >= x && r <= y) return st[id];
			int mid = (l + r) >> 1; down(id);
			return merge(get(x, y, l, mid, id << 1), get(x, y, mid + 1, r, id << 1 | 1));
		}
	};
	int res[N];
	void solve() {
		/*for(int i = 1; i <= n; i++) {
			T.init(n);
			int res = -1;
			for(int j = i; j <= n; j++) {
				pair<int, int> cur = T.get(
			}
		}*/
	}
}

int main() {
    fastio; local();
    cin >> n;
    for(int i = 1; i <= n; i++) {
    	cin >> h[i] >> a[i] >> b[i];
    }
    cin >> q;
    for(int i = 1; i <= q; i++) {
    	int l, r; cin >> l >> r;
    	que[i] = make_pair(l, r);
    }
    if(sub2::check()) sub2::solve();
}

Compilation message (stderr)

antennas.cpp: In function 'void local()':
antennas.cpp:7:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    7 |         freopen(taskname".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
antennas.cpp:8:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    8 |         freopen(taskname".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...