【题目大意】
本题的大意就是有n个飞船,给出飞船的位置和速度,求飞船之间超越的总次数(结果要mod 1000000)和两个互相超越的飞船的编号(按时间大小排序,如果超越的总次数大于10000则输出前10000个)
【解题报告】
求飞船之间超越的总次数逆序对即可。
两个互相超越的飞船的编号:
用小根堆来做,按照飞船x超越飞船y的时间的大小建堆。
每次从堆顶取出一组超越的编号,则先验证编号是否成立,成立便将这两艘飞船的实时位置交换,并判断交换后这两艘飞船是否可以超越相邻的飞船或被相邻的飞船超越,如果验证成功则将这组超越的编号放进堆中。
注:
1.实时位置为目前飞船所在的位置(即经过?次超越或被超越后,飞船所在的位置)
2.输出两个互相超越的飞船的编号中注意当超越的时间相同时,按照超越的飞船的实时位置从小到大排序,而不是初始位置。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=250005,maxm=10005,maxv=105,tt=1000000;
int n,num,len,ans,max_v,c[maxv],where[maxn];
struct wjd
{
int x,y,id;
}a[maxn];
struct ha
{
double x;
int s,t;
}hep[maxn+maxm];
inline int read_()
{
int sum=0;
char ch=getchar();
while (ch<'0'||ch>'9'