洛谷 U4566 赛车比赛
2016-11-18 21:48
211 查看
题目背景
kkk在赛车~
题目描述
现在有N辆赛车行驶在一条直线跑道(你可以认为跑道无限长)上。它们各自以某种速度匀速前进,如果有两辆车A车和B车,A车在B车的后面,且A车的速度大于B车的速度,那么经过一定的时间后,A车必定会超过B车,这称为一次超车。求超车总数。道路起点的位置为0,没有两辆车的初始位置相同。
输入输出格式
输入格式:第一行,一个数n,车辆的总数。
第二行~第n+1行,为n辆车的信息,每行有两个正整数x,y。X为起始位置,y为速度。0<x,y<=1000000
输出格式:
超车总数
输入输出样例
输入样例#1:2 5 6 2 8
输出样例#1:
1
说明
30%的数据,n<=30050%的数据,n<=3000
100%的数据,n<=300000
~~~~~~~~~~~~~~~~~~~~~~~~~
树状数组~
求逆序对,对于所有车按位置排序,逐个加入,每次计算在它之前的比它快的车,加入总和。
开long long!!!
#include<cstdio> #include<algorithm> using namespace std; #define ll long long ll n,c[1000001],ans; struct node{ ll x,y; }a[300001]; bool cmp(node u,node v) { return u.x<v.x; } int lowbit(int u) { return u&(-u); } void add(ll u) { for(ll i=u;i<=1000000;i+=lowbit(i)) c[i]++; } ll findd(ll u) { ll tot=0; for(ll i=u;i;i-=lowbit(i)) tot+=c[i]; return tot; } int main() { scanf("%lld",&n); for(ll i=1;i<=n;i++) scanf("%lld%lld",&a[i].x,&a[i].y); sort(a+1,a+n+1,cmp); for(ll i=1;i<=n;i++) { ans+=findd(1000000)-findd(a[i].y); add(a[i].y); } printf("%lld\n",ans); return 0; }
相关文章推荐
- 赛车比赛(洛谷U4566)
- 【水水水】【洛谷 U4566】赛车比赛
- 洛谷 U14475 部落冲突 【比赛】 【树链剖分 + 线段树】
- 洛谷 P2777 [AHOI2016初中组] 自行车比赛
- 最短路,Dijkstra(有趣的赛车比赛,uva 12661)
- 洛谷 P2777 [AHOI2016初中组]自行车比赛
- 洛谷2658 汽车拉力比赛 二分
- 洛谷2658 汽车拉力比赛
- 洛谷比赛日记
- 洛谷—— P2658 汽车拉力比赛
- 刷题比赛(洛谷 1707)
- 洛谷团队内部比赛解题报告
- 洛谷比赛『期末考后的休闲比赛2』
- 洛谷比赛 Joe的数
- 洛谷比赛有感
- 洛谷比赛 堕落的Joe
- UVA12661 有趣的赛车比赛
- 洛谷 P3256 [JLOI2013]赛车【半平面交??一次函数互相覆盖的判断】
- 腾讯的一个试题---36辆赛车,6个跑道,最少比赛次数,取得前三名
- 洛谷2658 汽车拉力比赛