Set 80pts 求助
查看原帖
Set 80pts 求助
1353330
K_J_M楼主2024/9/8 07:28
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5+10;
int n,m,u,v;
struct node{
	int x,t;
}a[N];
int b[N];
bool cmp(node x,node y){
	return x.t<y.t;
}
multiset<int>s;
map<int,int>buc;
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;++i){
		cin>>a[i].x>>a[i].t;
		b[i]=a[i].t;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;++i) buc[a[i].t]=i;
	for(int i=1;i<n;++i){
		s.insert(abs(a[i].x-a[i+1].x)/abs(a[i].t-a[i+1].t));
	}
	a[n+1].t=2e9;
	a[0].t=-2e9;
	for(int i=1;i<=m;++i){
		cin>>u>>v;
		u=buc[b[u]];
		if(v<a[u+1].t&&v>a[u-1].t){
			if(u>1)s.erase(abs(a[u].x-a[u-1].x)/abs(a[u].t-a[u-1].t));
			if(u<n)s.erase(abs(a[u+1].x-a[u].x)/abs(a[u+1].t-a[u].t));
			if(u>1)s.insert(abs(a[u].x-a[u-1].x)/abs(v-a[u-1].t));
			if(u<n)s.insert(abs(a[u+1].x-a[u].x)/abs(a[u+1].t-v));
			cout<<*(--s.end())<<endl;
			++s.end();
			if(u>1)s.insert(abs(a[u].x-a[u-1].x)/abs(a[u].t-a[u-1].t));
			if(u<n)s.insert(abs(a[u+1].x-a[u].x)/abs(a[u+1].t-a[u].t));
			if(u>1)s.erase(abs(a[u].x-a[u-1].x)/abs(v-a[u-1].t));
			if(u<n)s.erase(abs(a[u+1].x-a[u].x)/abs(a[u+1].t-v));
		}else{
			if(u>1)s.erase(abs(a[u].x-a[u-1].x)/abs(a[u].t-a[u-1].t));
			if(u<n)s.erase(abs(a[u+1].x-a[u].x)/abs(a[u+1].t-a[u].t));
			if(u<n&&u>1)s.insert(abs(a[u+1].x-a[u-1].x)/abs(a[u+1].t-a[u-1].t));
			if(v>a[u+1].t){
				int l=u,r=n+1;
				while(l<r-1){
					int mid=l+r>>1;
					if(v>a[mid].t)l=mid;
					else r=mid;
				}
				if(l<n)s.erase(abs(a[l+1].x-a[l].x)/abs(a[l+1].t-a[l].t));
				if(l<n)s.insert(abs(a[l+1].x-a[u].x)/abs(a[l+1].t-v));
				if(l>0)s.insert(abs(a[l].x-a[u].x)/abs(a[l].t-v));
				cout<<*(--s.end())<<endl;
				++s.end();
				if(l<n)s.insert(abs(a[l+1].x-a[l].x)/abs(a[l+1].t-a[l].t));
				if(l<n)s.erase(abs(a[l+1].x-a[u].x)/abs(a[l+1].t-v));
				if(l>0)s.erase(abs(a[l].x-a[u].x)/abs(a[l].t-v));
			}else{
				int l=0,r=u;
				while(l<r-1){
					int mid=l+r>>1;
					if(v>a[mid].t) l=mid;
					else r=mid;
				}
				if(l<n)s.erase(abs(a[l+1].x-a[l].x)/abs(a[l+1].t-a[l].t));
				if(l<n)s.insert(abs(a[l+1].x-a[u].x)/abs(a[l+1].t-v));
				if(l>0)s.insert(abs(a[l].x-a[u].x)/abs(a[l].t-v));
				cout<<*(--s.end())<<endl;
				++s.end();
				if(l<n)s.insert(abs(a[l+1].x-a[l].x)/abs(a[l+1].t-a[l].t));
				if(l<n)s.erase(abs(a[l+1].x-a[u].x)/abs(a[l+1].t-v));
				if(l>0)s.erase(abs(a[l].x-a[u].x)/abs(a[l].t-v));
			}
			if(u>1)s.insert(abs(a[u].x-a[u-1].x)/abs(a[u].t-a[u-1].t));
			if(u<n)s.insert(abs(a[u+1].x-a[u].x)/abs(a[u+1].t-a[u].t));
			if(u<n&&u>1)s.erase(abs(a[u+1].x-a[u-1].x)/abs(a[u+1].t-a[u-1].t));
		}
	}
	return 0;
}
2024/9/8 07:28
加载中...