HDU 2795 Billboard(线段树点更新)

2015-07-20 17:52:39 · 作者: · 浏览: 3

HDU 2795


题意:长条形广告(1*Wi),贴入广告板(h*w),尽可能的高,其次尽可能的左。


最初看到题,想到用数组记录入每一行剩余的长度,初始为w。
但是会发现每次都要从头扫描,直到找到符合的位置。时间复杂度,就不用谈了,一定T掉。


题目,又是不断更新某行的剩余长度,还要不断查询,所以线段树了。


知识点:选择范围的点更新。

#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
       
         #include
        
          #include
         
           #include
          
            #include
            #define MAXN 200001 #define PI acos(-1.0) #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define bug(a) cout<<"bug---->"<
            
             >1; build(lson); build(rson); } void update(LL clen,int l,int r,int rt) { if(rlen[rt]
             
              >1; if(clen<=rlen[rt<<1]) update(clen,lson); else update(clen,rson); pushup(rt); } int main() { while(scanf("%I64d%I64d%d",&h,&w,&n)!=EOF) { int N=n; if(h