二分30ptsTLE求调
查看原帖
二分30ptsTLE求调
1067592
HeartBeast楼主2024/9/7 22:04
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn int(2e5+10)
#define inf 1e9
#define ll long long
struct node{
	int t,x,idx;
}a[maxn],b[maxn];
inline int read(){
	char c=getchar(); int t=1,k=0;
	while('0'>c||c>'9'){if(c=='-') t=-1; c=getchar();}
	while('0'<=c&&c<='9'){k=k*10+(c^48); c=getchar();}
	return t*k;
}
inline bool cmp(node a,node b){
	return a.t<b.t;
}
int n,m,u,v,ans;
double l,r,mid,eps=0.1;
inline bool check(node a[])
{	
	for(int i=1;i<n;i++){
		int s=abs(a[i].x-a[i+1].x);
		int t=a[i+1].t-a[i].t;
		double fv=s/t;
		if(fv>mid) return 0;
	}
	return 1;
}
int main(){
	n=read(),m=read();
	for(int i=1;i<=n;i++) 
		a[i].x=read(),a[i].t=read();
	for(int i=1;i<=n;i++)
		b[i].x=a[i].x,b[i].t=a[i].t;
	for(int i=1;i<=m;i++){
		u=read(),v=read();
		b[u].t=v; l=0,r=inf;
		sort(b+1,b+n+1,cmp);
		while(r-l>eps){
			mid=(l+r)/2.0;
			if(check(b)) r=mid,ans=mid;
			else l=mid;
		}
		for(int i=1;i<=n;i++)
			b[i].x=a[i].x,b[i].t=a[i].t;
		printf("%d\n",ans);
	}	
	return 0;
}
2024/9/7 22:04
加载中...