zoukankan      html  css  js  c++  java
  • 二维偏序

    Laptop

    要求的是所有的存在s,w都比它大的物品的物品的个数

    正着不好去重

    倒着枚举s,当前位置后面的物品s都比它大,减掉w比他小的,就能判断是否有w也比他大的

    如果有 ans++

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    #define sc(x) scanf("%lld",&x);
    #define si signed
    int n;
    int M[100005];
    int S[100005];
    int I[100005];
    int m[100005];
    int B[100005];
    bool cmp(int x,int y)
    {
        return S[x]<S[y];
    }
    void add(int x)
    {
        int i=x;
        for(;i<=100000;i+=(i&(-i))){
            B[i]++;
        }
    }
    int ask(int x)
    {
        int i=x;
        int ans=0;
        for(;i>0;i-=(i&(-i))){
            ans+=B[i];
            //cout<<ans<<endl;
        }
        return ans;
    }
    si main()
    {
        sc(n);
        for(int i=1;i<=n;i++){
            sc(M[i])sc(S[i])
            I[i]=i;m[i]=M[i];
        }
        sort(I+1,I+n+1,cmp);
        sort(m+1,m+1+n);
        int len=unique(m+1,m+1+n)-(m+1);
    
        for(int i=1;i<=n;i++)
         M[i]= lower_bound(m+1,m+1+len,M[i])-(m);
    
        int ans=0;
        //cout<<"TRUE"<<endl;
        for(int i=n;i>=1;i--){
            int t=ask(M[I[i]]);
    
            if(n-t-i>0)ans++;
            //cout<<ans<<endl;
            add(M[I[i]]);
        }
        cout<<ans<<'
    ';
    }

    10114. 「一本通 4.1 例 2」数星星 Stars

    排序时注意下第二个维度

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    #define sc(x) scanf("%lld",&x);
    #define si signed
    int n;
    int M[100005];
    int S[100005];
    int I[100005];
    int m[100005];
    int B[100005];
    int Ans[100005];
    bool cmp(int x,int y)
    {
        if(S[x]==S[y])return M[x]<M[y];
        return S[x]<S[y];
    }
    void add(int x)
    {
        int i=x;
        for(;i<=100000;i+=(i&(-i))){
            B[i]++;
        }
    }
    int ask(int x)
    {
        int i=x;
        int ans=0;
        for(;i>0;i-=(i&(-i))){
            ans+=B[i];
            //cout<<ans<<endl;
        }
        return ans;
    }
    si main()
    {
        sc(n);
        for(int i=1;i<=n;i++){
            sc(M[i])sc(S[i])
            I[i]=i;m[i]=M[i];
        }
        sort(I+1,I+n+1,cmp);
        sort(m+1,m+1+n);
        int len=unique(m+1,m+1+n)-(m+1);
    
        for(int i=1;i<=n;i++)
         M[i]= lower_bound(m+1,m+1+len,M[i])-(m);
    
        int ans=0;
        //cout<<"TRUE"<<endl;
        for(int i=1;i<=n;i++){
            int t=ask(M[I[i]]);
    
            Ans[t]++;
            //cout<<ans<<endl;
            add(M[I[i]]);
        }
        for(int i=0;i<n;i++){
            cout<<Ans[i]<<endl;
        }
    }
  • 相关阅读:
    tinymce原装插件源码分析(二)-link
    tinymce原装插件源码分析(一)-hr
    pyinstall 常见错误
    matlab Time-domain analysis 渐进式或者实时获取仿真值
    初识python和pycharm
    自定义指令详解
    Vue核心知识一览
    多维数组 转化为 一维数组
    js面试之数组的几个不low操作
    js如何操作或是更改sass里的变量
  • 原文地址:https://www.cnblogs.com/liulex/p/11782272.html
Copyright © 2011-2022 走看看