zoukankan      html  css  js  c++  java
  • Light OJ 1089 Points in Segments (II)

    http://www.lightoj.com/volume_showproblem.php?problem=1089

    题意很简单,就是给出一些线段和一些点,求每个点被覆盖的次数。做的时候,二分写烂了,一直超时。晕~~~

    AC Code
      1 #include <cstdio>
      2 #include <algorithm>
      3 using namespace std;
      4 #define lson l,m,rt<<1
      5 #define rson m+1,r,rt<<1|1
      6 #define maxn 50005
      7 struct node{
      8     int cnt;
      9 }setree[maxn<<2];
     10 struct op{
     11     int l,r;
     12 }mes[maxn];
     13 int sorted[maxn],num[maxn];
     14 void build(int l,int r,int rt)
     15 {
     16     setree[rt].cnt=0;
     17     if(l==r)
     18     return;
     19     int m=(l+r)>>1;
     20     build(lson);
     21     build(rson);
     22 }
     23 int binsearch1(int l,int r,int num)
     24 {
     25     int m=(l+r)>>1;
     26     if(sorted[m-1]<num&&num<=sorted[m])
     27     return m;
     28     if(num<=sorted[m-1])
     29     return binsearch1(l,m-1,num);
     30     else
     31     return binsearch1(m+1,r,num);
     32     
     33     
     34 }
     35 int binsearch2(int l,int r,int num)
     36 {
     37     int m=(l+r)>>1;
     38     if(sorted[m]<=num&&num<sorted[m+1])
     39     return m;
     40     if(num<sorted[m])
     41     return binsearch2(l,m-1,num);
     42     else
     43     return binsearch2(m+1,r,num);
     44 }
     45 int binsearch(int l,int r,int num)
     46 {
     47     int m=(l+r)>>1;
     48     if(num==sorted[m])
     49     return m;
     50     if(num<sorted[m])
     51     return binsearch(l,m-1,num);
     52     return binsearch(m+1,r,num);
     53 }
     54 void pushdown(int rt)
     55 {
     56     if(setree[rt].cnt!=0){
     57         setree[rt<<1].cnt+=setree[rt].cnt;
     58         setree[rt<<1|1].cnt+=setree[rt].cnt;
     59         setree[rt].cnt=0;
     60     }
     61 }
     62 void update(int l,int r,int rt,int L,int R)
     63 {
     64     if(L<=l&&r<=R){
     65         setree[rt].cnt++;
     66         return;
     67     }
     68     int m=(l+r)>>1;
     69     pushdown(rt);
     70     if(L<=m)
     71     update(lson,L,R);
     72     if(R>m)
     73     update(rson,L,R);
     74 }
     75 int query(int l,int r,int rt,int pos)
     76 {
     77     if(l==r)
     78     return setree[rt].cnt;
     79     int m=(l+r)>>1;
     80     pushdown(rt);
     81     if(pos<=m)
     82     return query(lson,pos);
     83     else
     84     return query(rson,pos);
     85 }
     86 int main()
     87 {
     88     int t,cas=1;
     89     sorted[0]=-1;
     90     scanf("%d",&t);
     91     while(t--){
     92         int n,q;
     93         scanf("%d%d",&n,&q);
     94         for(int i=1;i<=n;i++){
     95             scanf("%d%d",&mes[i].l,&mes[i].r);
     96         }
     97         for(int i=1;i<=q;i++){
     98             scanf("%d",&num[i]);
     99             sorted[i]=num[i];
    100         }
    101         sort(sorted+1,sorted+1+q);
    102         int k=1;
    103         for(int i=2;i<=q;i++)
    104         if(sorted[i]!=sorted[i-1])
    105         sorted[++k]=sorted[i];
    106         build(1,k,1);
    107         for(int i=1;i<=n;i++){
    108             if(mes[i].r<sorted[1]||mes[i].l>sorted[k])
    109             continue;
    110             int l,r;
    111             if(mes[i].l<=sorted[1])
    112             l=1;
    113             else
    114             l=binsearch1(1,k,mes[i].l);
    115             if(mes[i].r>=sorted[k])
    116             r=k;
    117             else
    118             r=binsearch2(1,k,mes[i].r);
    119             if(l<=r)
    120             update(1,k,1,l,r);
    121         }
    122         printf("Case %d:\n",cas++);
    123         for(int i=1;i<=q;i++){
    124             int pos=binsearch(1,k,num[i]);
    125             printf("%d\n",query(1,k,1,pos));
    126         }
    127     }
    128     return 0;
    129 }
  • 相关阅读:
    多线程GCD
    根据UITouch 自定义手势
    KVC在数据解析中的应用
    oc 文件读写操作
    oc 字典应用实例-城市查询省份
    oc 字典应用实例-成绩科目排序
    oc 数组应用实例-验证码
    协议 protocol
    概念杂记
    OC 类的继承 方法重载重写
  • 原文地址:https://www.cnblogs.com/kim888168/p/3063933.html
Copyright © 2011-2022 走看看