zoukankan      html  css  js  c++  java
  • LC 493. Reverse Pairs

    link

     Fenwick Tree:

    class Solution {
    public:
        int n;
        int reversePairs(vector<int>& nums) {
            n=nums.size();
            vector<int> copy=nums;
            sort(copy.begin(),copy.end());
            vector<int> fenwick(n+1);
            int res=0;
            for(int i=n-1;i>=0;i--){
                int idx=binarysearch(copy,nums[i]);
                if(idx>=0){
                    res+=query(fenwick,idx);
                }
                int curidx=binarysearch2(copy,nums[i]);
                update(fenwick,curidx);
            }
            return res;
        }
        
        int query(vector<int>& fenwick, int idx){
            idx++;
            int res=0;
            while(idx>=1){
                res+=fenwick[idx];
                idx-=(idx&-idx);
            }
            return res;
        }
        
        void update(vector<int>& fenwick, int idx){
            idx++;
            while(idx<=n){
                fenwick[idx]++;
                idx+=(idx&-idx);
            }
        }
        
        int binarysearch(vector<int>& copy, int val){
            int left=0;
            int right=n-1;
            while(left<=right){
                int mid=left+(right-left)/2;
                if((long long)2*copy[mid]<val){
                    left=mid+1;
                }else right=mid-1;
            }
            return right;
        }
        
        int binarysearch2(vector<int>& copy, int val){
            int left=0;
            int right=n-1;
            while(left<=right){
                int mid=left+(right-left)/2;
                if(copy[mid]>=val) right=mid-1;
                else left=mid+1;
            }
            return left;
        }
    };

    segment tree:

    class Solution {
    public:
        int n;
        vector<int> seg;
        int reversePairs(vector<int>& nums) {
            n=nums.size();
            vector<int> copy=nums;
            sort(copy.begin(),copy.end());
            seg=vector<int>(n<<2);
            int res=0;
            for(int i=n-1;i>=0;i--){
                int lastidx=binarysearch(copy,nums[i]);
                if(lastidx>=0){
                    res+=query(0,0,n-1,0,lastidx);
                }
                int curidx=binarysearch2(copy,nums[i]);
                update(0,0,n-1,curidx);
            }
            return res;
        }
        
        int query(int idx, int left, int right, int qleft, int qright){
            if(qleft>right || qright<left) return 0;
            if(qleft<=left && qright>=right) return seg[idx];
            int mid=left+(right-left)/2;
            int l=query(idx*2+1,left,mid,qleft,qright);
            int r=query(idx*2+2,mid+1,right,qleft,qright);
            return l+r;
        }
        
        void update(int idx, int left, int right, int targetidx){
            if(left>targetidx || right<targetidx) return;
            if(left==right){
                seg[idx]++;
                return;
            }
            int mid=left+(right-left)/2;
            update(idx*2+1,left,mid,targetidx);
            update(idx*2+2,mid+1,right,targetidx);
            seg[idx]=seg[idx*2+1]+seg[idx*2+2];
        }
        
        int binarysearch(vector<int>& copy, int val){
            int left=0;
            int right=n-1;
            while(left<=right){
                int mid=left+(right-left)/2;
                if((long long)2*copy[mid]<val){
                    left=mid+1;
                }else right=mid-1;
            }
            return right;
        }
        
        int binarysearch2(vector<int>& copy, int val){
            int left=0;
            int right=n-1;
            while(left<=right){
                int mid=left+(right-left)/2;
                if(copy[mid]>=val) right=mid-1;
                else left=mid+1;
            }
            return left;
        }
    };
  • 相关阅读:
    WordPress 常用的动作钩子
    wordpress的过滤器
    实战haslayout(实战篇)!
    wordpress函数描述之一——WordPress add_theme_support() 函数
    一些闲言碎语,好记星不如烂笔头(一)
    实战haslayout(理论篇)!
    WordPress的钩子函数之一——do_action()
    IE6变态bug总结非常好!没有错误
    Javascript参考博客
    SilverLight遍历父子控件的通用方法
  • 原文地址:https://www.cnblogs.com/FEIIEF/p/12859219.html
Copyright © 2011-2022 走看看