hrbust1400 11年省赛 树状数组(逆序数)

来源:互联网 发布:360数据恢复好用不 编辑:程序博客网 时间:2024/06/16 20:48
题意:给出 车辆起始位置X i 和速度 V i求超车次数#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;struct node{    int v,p;}q[100001];int cmp(struct node a,struct node b){    if(a.p==b.p)return a.v>b.v;    return a.p<b.p;}long long a[100005];int maxn;int lowbit(int x){    return (x)&(-x);}void add(int pos){    while (pos <= maxn)    {        a[pos] += 1;        pos += lowbit(pos);    }}long long sum(int pos){    long long s = 0;    while (pos > 0)    {        s += a[pos];        pos -= lowbit(pos);    }    return s;}int main(){    int n,i;    long long res;    while(scanf("%d",&n)!=EOF)    {         res=0;         maxn=0;         memset(a,0,sizeof(a));         for(i=1;i<=n;i++)         {            scanf("%d%d",&q[i].p,&q[i].v);            if(maxn<q[i].v)maxn=q[i].v;         }         sort(q,q+n+1,cmp);         for(i=1;i<=n;i++)         {            add(q[i].v);            res=res+(i-sum(q[i].v));         }         printf("%lld\n",res);    }    return 0;}

原创粉丝点击