• 51nod 1107 斜率小于零连线数量 特调逆序数


    逆序数的神题。。。。

    居然是逆序数

    居然用逆序数过的

    提示。。。按照X从小到大排列,之后统计Y的逆序数。。。

    之后,得到的答案就是传说中的解(斜率小于零)

    #include<bits/stdc++.h>
    using namespace std;
    
    const long long MAXN = 500233;
    pair<long long,long long> arr[MAXN];
    
    bool com(pair<long long,long long>p1,
            pair<long long,long long>p2)
    {
        if(p1.first==p2.first)return p1.second<p2.second;
        return p1.first<p2.first;
    }
    long long tree[MAXN];
    long long arr1[MAXN];
    void insert(int pos,int key=1)
    {
        while(pos<MAXN)
        {
            tree[pos]+=key;
            pos+=pos&(-pos);
        } 
    }
    long long getSum(int pos)
    {
        long long ret=0;
        while(pos>0)
        {
            ret+=tree[pos];
            pos-=pos&(-pos);
            
        }return ret;
    }
    map<long long ,long long> m1;
    
    int main()
    {
        cin.sync_with_stdio(false);
        long long n;cin>>n;
        for(int i=0;i<n;++i)
        {
            cin>>arr[i].first>>arr[i].second;
            arr1[i]=arr[i].second;
    //        cout<<m1[arr[i].second]<<endl;
        }
        sort(arr1,arr1+n);
        for(int i=0;i<n;++i)if(!m1.count(arr1[i]))m1[arr1[i]]=m1.size()+1;
        sort(arr,arr+n,com);
        
        //long long ret=0;
        
        long long ret=(n-1)*(n)/2;
        for(int i=0;i<n;++i)
        {
        //    cout<<arr[i].first<<ends<<arr[i].second<<ends;
            ret-=getSum(m1[arr[i].second]);//cout<<ret<<endl;
            insert(m1[arr[i].second]);
        }
        cout<<ret<<endl;
        return 0; 
    } 

    我们大家都很绝望,但是有的人比我们更加绝望。

  • 相关阅读:
    SQliteDatabase详解
    Eclipse常用快捷键
    Android 省市区三级联动
    关于安卓9patch图片的探究
    9patch
    Day3_UI布局--FXQ
    day2-UI布局
    Day01_扩展_Genymotion模拟器的使用
    React Examples
    React项目结构
  • 原文地址:https://www.cnblogs.com/rikka/p/7347614.html
Copyright © 2020-2023  润新知