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;
        }
    }
  • 相关阅读:
    document 对象
    AdodbStream的方法和属性
    WEB开发者版本
    ATI HD2400
    驱蚊植物
    PHP5+UTF8多文件上传类
    nVIDIA_driver
    ati
    Zend_Http_Client setFileUpload
    Sqlserver2005 数据类型
  • 原文地址:https://www.cnblogs.com/liulex/p/11782272.html
Copyright © 2011-2022 走看看