對於100%的數據N<=10000, 0<=ki<=10^9, 0<=vi<=10^9
2016.1.17新加數據一組 By Nano_ape
計算幾何,維護一個y軸右面的半平面交。
注意兩個賽車速度和起始狀態都相同的情況。
#include#include #include #include #include #include #include #define F(i,j,n) for(int i=j;i<=n;i++) #define D(i,j,n) for(int i=j;i>=n;i--) #define ll long long #define maxn 10005 #define eps 1e-8 using namespace std; int n,top,ans[maxn],f[maxn]; struct car{int p,v,id;}a[maxn],s[maxn]; vector v[maxn]; inline int read() { int x=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } inline bool cmp(car x,car y) { return (x.v==y.v)?x.p>y.p:x.v =2&&cross(s[top],s[top-1])>cross(s[top-1],a[i])) top--; while (top>=1&&cross(s[top],a[i])<-eps) top--; s[++top]=a[i]; } F(i,1,top) ans[i]=s[i].id; int tt=top; F(i,1,tt) for(int j=0;j