zoukankan      html  css  js  c++  java
  • 【POJ】2528 Mayor's posters

      1 #include<cstdio>
      2 #include<cstring>
      3 #include<cstdlib>
      4 #define MAXN 50010
      5 struct node
      6 {
      7     int x,y;
      8 };
      9 node a[MAXN],p[MAXN];
     10 int cmp(const void *a,const void *b)
     11 {
     12     return (*(node *)a).x-(*(node *)b).x;
     13 }
     14 int ans,tree[MAXN<<2];
     15 bool vis[MAXN];
     16 inline void PushDown(int rt)
     17 {
     18     if(tree[rt])
     19     {
     20         tree[rt<<1]=tree[rt<<1|1]=tree[rt];
     21         tree[rt]=0;
     22     }
     23 }
     24 void Update(int x,int y,int val,int L,int R,int rt)
     25 {
     26     if(x<=L&&R<=y)
     27         tree[rt]=val;
     28     else
     29     {
     30         int mid=(L+R)>>1;
     31         PushDown(rt);
     32         if(mid>=x)
     33             Update(x,y,val,L,mid,rt<<1);
     34         if(y>mid)
     35             Update(x,y,val,mid+1,R,rt<<1|1);
     36     }
     37 }
     38 void Query(int L,int R,int rt)
     39 {
     40     if(tree[rt])
     41     {
     42         if(!vis[tree[rt]])
     43         {
     44             vis[tree[rt]]=true;
     45             ans++;
     46         }
     47     }
     48     else if(L!=R)
     49     {
     50         int mid=(L+R)>>1;
     51         Query(L,mid,rt<<1);
     52         Query(mid+1,R,rt<<1|1);
     53     }
     54 }
     55 int Bin(int low,int high,int val)
     56 {
     57     int mid;
     58     while(low<high)
     59     {
     60         mid=(high+low)>>1;
     61         if(a[mid].x==val)
     62             return a[mid].y;
     63         if(a[mid].x>val)
     64             high=mid;
     65         else
     66             low=mid+1;
     67     }
     68 }
     69 int main()
     70 {
     71     int c,n,i,j,k;
     72     scanf("%d",&c);
     73     while(c--)
     74     {
     75         scanf("%d",&n);
     76         for(i=k=0;i<n;i++)
     77         {
     78             scanf("%d%d",&p[i].x,&p[i].y);
     79             a[k++].x=p[i].x;
     80             a[k++].x=p[i].y;
     81         }
     82         qsort(a,k,sizeof(a[0]),cmp);
     83         for(i=j=0;i<k;i++)
     84         {
     85             if(a[i].x!=a[j].x)
     86                 a[++j]=a[i];
     87         }
     88         k=j+1;
     89         a[0].y=j=1;
     90         for(i=1;i<k;i++)
     91         {
     92             if(a[i].x==a[i-1].x+1)
     93                 j++;
     94             else
     95                 j+=2;
     96             a[i].y=j;
     97         }
     98         memset(tree,0,sizeof(tree));
     99         memset(vis,false,sizeof(vis));
    100         for(i=ans=0;i<n;i++)
    101             Update(Bin(0,k,p[i].x),Bin(0,k,p[i].y),i+1,1,j,1);
    102         Query(1,j,1);
    103         printf("%d\n",ans);
    104     }
    105     return 0;
    106 }
    新博客:www.zhixiangli.com
  • 相关阅读:
    简单的验证码;在一个数组中随即打印出4个不重复的字母
    数据类型
    java语法基础
    mac 开机运行脚本
    【mac】 搭建java环境
    mac 复制文件到NTFS格式的移动硬盘
    JAVA学习日报 8.19
    JAVA学习日报 8.20
    (VI)事务:Spring 事务管理
    (VI)事务:Spring 事务细节
  • 原文地址:https://www.cnblogs.com/DrunBee/p/2512492.html
Copyright © 2011-2022 走看看