求助,set做法第二个点RE
查看原帖
求助,set做法第二个点RE
785657
jun666楼主2024/9/15 12:47
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef long long ll;
const int N = 1e5 + 5;
typedef pair<int, int> PII;
multiset<PII> s;
multiset<int> ans;
int t[N], x[N], u, v, n, m;
PII a[N];
int cal(PII a, PII b) {
	return abs(a.y - b.y) / abs(a.x - b.x);
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> x[i] >> t[i];
		a[i] = make_pair(t[i], x[i]);
		s.insert(make_pair(t[i], x[i]));
	}
	sort(a + 1, a + 1 + n);
	for (int i = 1; i < n; i++) {
		ans.insert(cal(a[i], a[i + 1]));
	}
	while (m--) {
		int a1, a2;
		cin >> u >> v;
		auto it = s.lower_bound(make_pair(t[u], x[u])), l=it, r=it;
		l = r = it;
		l--;
		r++;
		PII b1 = *l,  b2 = *r;
		a1 = cal(*l, *it), a2 = cal(*it, *r);
		ans.erase(ans.find(a1)), ans.erase(ans.find(a2));
		ans.insert(cal(*l, *r));
		s.erase(it);
		l = r = s.upper_bound(make_pair(v, x[u]));
		l--;
		cout << max(max(cal(*l, make_pair(v,x[u])),cal(*r, make_pair(v,x[u]))), *(--ans.end())) << '\n';
		s.insert(make_pair(t[u], x[u]));
		ans.erase(ans.find(cal(b1, b2)));
		ans.insert(a1), ans.insert(a2);
	}
	return 0;
}
2024/9/15 12:47
加载中...