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;
        }
    };
    
  • 相关阅读:
    pip常用命令
    Conda环境管理
    关于自动化去掉验证码(收录)
    下载安装Eclipse---来自廖雪峰老师
    linux之top命令
    python——os模块
    Crypto
    Java_局部内部类
    Java_内部类
    Java_权限修饰符
  • 原文地址:https://www.cnblogs.com/zxcoder/p/12867755.html
Copyright © 2011-2022 走看看