zoukankan      html  css  js  c++  java
  • codeforces 652D Nested Segments 离散化+树状数组

    题意:给你若干个区间,询问每个区间包含几个其它区间

    分析:区间范围比较大,然后离散化,按右端点排序,每次更新树状数组中的区间左端点,查询区间和

    注:(都是套路)

    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<cstdlib>
    #include<algorithm>
    #include<vector>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    const int N=2e5+5;
    const int INF=0x3f3f3f3f;
    int a[N<<1],n,d;
    struct pair{
      int l,r,id;
      bool operator<(const pair &e)const{
         return r<e.r;
      }
    }p[N];
    int c[N<<1];
    void change(int x){
       for(int i=x;i<=d;i+=i&(-i))
         ++c[i];
    }
    int query(int x){
      int ans=0;
      for(int i=x;i>0;i-=i&(-i))
        ans+=c[i];
      return ans;
    }
    int res[N];
    int main(){ 
        scanf("%d",&n);
        int tot=0;
        for(int i=1;i<=n;++i){
           scanf("%d%d",&p[i].l,&p[i].r),p[i].id=i;
           a[++tot]=p[i].l;
           a[++tot]=p[i].r;
        }
        sort(a+1,a+1+tot);
        d=1;
        for(int i=2;i<=tot;++i)
          if(a[i]!=a[i-1])a[++d]=a[i];
        sort(p+1,p+1+n);
        for(int i=1;i<=n;++i){
          int r=lower_bound(a+1,a+1+d,p[i].r)-a;
          int l=lower_bound(a+1,a+1+d,p[i].l)-a;
          res[p[i].id]=query(r)-query(l-1);
          change(l);
        }
        for(int i=1;i<=n;++i)
         printf("%d
    ",res[i]); 
        return 0;
    }
    View Code
  • 相关阅读:
    通配符
    Hibernate入门简介
    Java的参数传递是值传递?
    Java线程详解
    java基础总结
    谈谈对Spring IOC的理解
    Oracle SQL语句之常见优化方法总结--不定更新
    JVM 工作原理和流程
    Java中的String为什么是不可变的? -- String源码分析
    Spring AOP 简介
  • 原文地址:https://www.cnblogs.com/shuguangzw/p/5326467.html
Copyright © 2011-2022 走看看