zoukankan      html  css  js  c++  java
  • Leetcode_1395. 统计作战单位数

    求升序或降序三元组的数量

    bit求出每个数两侧大于和小于的数的个数,然后枚举三元组中间数字。

    code

    class Solution {
    public:
        int c[100050];
        int lowbit(int x){
            return x&(-x);
        }
        void add(int i,int x){
            int n=int(1e5);
            while(i<=n){
                c[i]+=x;
                i+=lowbit(i);
            }
        }
        int sum(int i){
            int ans=0;
            int n=int(1e5);
            while(i){
                ans+=c[i];
                i-=lowbit(i);
            }
            return ans;
        }
        int numTeams(vector<int>& rating) {
            int n=rating.size();
            vector<int> les(n,0),rib(n,0),leb(n,0),ris(n,0);
            int ans=0;
            for(int i=n-1;i>=0;i--){
                ris[i]=sum(rating[i]);
                rib[i]=(n-1-i)-ris[i];
                add(rating[i],1);
            }
            memset(c,0,sizeof(c));
            for(int i=0;i<n;i++){
                les[i]=sum(rating[i]);
                leb[i]=i-les[i];
                add(rating[i],1);
            }
            for(int i=0;i<n;i++){
                ans+=les[i]*rib[i];
                ans+=leb[i]*ris[i];
            }
            return ans;
        }
    };
    
  • 相关阅读:
    2-1(续)
    2-1
    28-69. Sqrt(x)
    27-75. Sort Colors
    26-78. Subsets
    MySQL--->存储引擎及图形化工具
    MySQL--->高级对象
    MySQL--->常用函数
    MySQL--->多表查询
    MySQL--->高级查询
  • 原文地址:https://www.cnblogs.com/zxcoder/p/12867755.html
Copyright © 2011-2022 走看看