zoukankan      html  css  js  c++  java
  • $P3253 [JLOI2013]删除物品$

    (1<=N1+N2<=100000)
    显然(N^2)的模拟过不去。
    所以去想(O(N log N))的算法。(不清楚(O(N))的瞎搞能不能AC)
    至于 (O(N log N)) 的数据结构 我们不难想到 ST表 线段树 以及是树状数组
    那么因为线段树太难打了。(大雾
    选择树状数组。

    #include <bits/stdc++.h>
    #define rep(i,j,n) for(register int i=j;i<=n;i++)
    #define Rep(i,j,n) for(register int i=j;i>=n;i--)
    #define low(x) x&(-x)
    using namespace std ;
    typedef long long LL ;
    const int inf = INT_MAX >> 1 ;
    inline LL In() { LL res(0) , f(1) ; register char c ;
    #define gc c = getchar()
        while(isspace(gc)) ; c == '-' ? f = - 1 , gc : 0 ;
        while(res = (res << 1) + (res << 3) + (c & 15) , isdigit(gc)) ;
        return res * f ;
    #undef gc
    }
    
    const int N = 100000 + 5 ;
    int n , m ;
    int a[N] ;
    int tree[N] ;
    struct node {
        int x ; int id ;
    };
    bool cmp(node x , node y) {
        return x.x > y.x ;
    }
    node Node[N] ;
    inline void update(int x,int y) {
        for(;x<=n+m;x+=low(x)) tree[x] += y ;
    }
    inline LL query (int x) {
        LL sum (0) ;
        for(;x>=1;x-=low(x)) sum += tree[x] ;
        return sum ;
    }
    inline void Ot() {
        n = In() , m = In() ;
        for(register int i=n;i>=1;i--) {
            a[i] = In() ;
        }
        for(register int i=n+1;i<=n+m;i++) {
            a[i] = In() ;
        }
        for(register int i=1;i<=n+m;i++) {
            Node[i] = node({a[i],i}) ;
            update(i,1) ;
        }
        sort(Node+1,Node+n+m+1,cmp) ;
        int p = n ;
        LL ans(0) ;
        for(register int i=1;i<=n+m;i++) {
            int x = Node[i].id ;
            if(p<x) {
                ans += query(x-1) - query(p) ;
                p = x - 1 ;
                update(x , -1) ;
            }
            else {
                ans += query(p) - query(x) ;
                p = x ;
                update(x , -1) ;
            }
        }
        printf("%lld",ans) ;
    }
    signed main() {
    //	freopen("test.in","r",stdin) ;
    //  freopen("testdata.txt","w",stdout) ;
        return Ot() , 0 ;
    }
    
  • 相关阅读:
    Ping 笔记
    android之RadioGroup
    Android之activity中新建控件
    案例:TableLayout表格布局——迷你计算器
    android中5大布局
    Android体系结构及activity生命周期
    Android之ADB指令
    Android之activity初讲
    简单介绍Android应用特色及详解四大组件
    开发Android应用怎么更改LOGO图标
  • 原文地址:https://www.cnblogs.com/qf-breeze/p/10698059.html
Copyright © 2011-2022 走看看