设为首页 加入收藏

TOP

codeforces #52 C Circular RMQ(线段树)
2015-07-20 17:44:34 来源: 作者: 【 】 浏览:1
Tags:codeforces #52 Circular RMQ 线段

?

线段树区间更新水题。

代码如下:

?

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include
           #include 
           
             #include 
            
              using namespace std; const int INF=0x3f3f3f3f; #define lson l, mid, rt<<1 #define rson mid+1, r, rt<<1|1 int min1[1000000], lazy[1000000]; void PushUp(int rt) { min1[rt]=min(min1[rt<<1],min1[rt<<1|1]); } void PushDown(int rt) { if(lazy[rt]) { min1[rt<<1|1]+=lazy[rt]; min1[rt<<1]+=lazy[rt]; lazy[rt<<1|1]+=lazy[rt]; lazy[rt<<1]+=lazy[rt]; lazy[rt]=0; } } void build(int l, int r, int rt) { if(l==r) { scanf(%d,&min1[rt]); return ; } int mid=l+r>>1; build(lson); build(rson); PushUp(rt); } void update(int ll, int rr, int x, int l, int r, int rt) { if(ll<=l&&rr>=r) { lazy[rt]+=x; min1[rt]+=x; return ; } PushDown(rt); int mid=l+r>>1; if(ll<=mid) update(ll,rr,x,lson); if(rr>mid) update(ll,rr,x,rson); PushUp(rt); } int query(int ll, int rr, int l, int r, int rt) { if(ll<=l&&rr>=r) { return min1[rt]; } PushDown(rt); int ans=INF, mid=l+r>>1; if(ll<=mid) ans=min(ans,query(ll,rr,lson)); if(rr>mid) ans=min(ans,query(ll,rr,rson)); return ans; } int main() { int n, l, r, x, q, i; scanf(%d,&n); build(0,n-1,1); scanf(%d,&q); memset(lazy,0,sizeof(lazy)); while(q--) { scanf(%d%d,&l,&r); if(getchar()==' ') { scanf(%d,&x); if(l>r) { update(l,n-1,x,0,n-1,1); update(0,r,x,0,n-1,1); /*for(i=1;i<=7;i++) printf(%d ,min1[i]); printf( );*/ } else { update(l,r,x,0,n-1,1); /*for(i=1;i<=7;i++) printf(%d ,min1[i]); printf( );*/ } } else { if(l>r) { int ans=min(query(l,n-1,0,n-1,1),query(0,r,0,n-1,1)); printf(%d ,ans); } else { int ans=query(l,r,0,n-1,1); printf(%d ,ans); } } } return 0; } 
            
           
         
        
       
      
     
    
   
  


?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇zoj 2027 Travelling Fee (最短路.. 下一篇POJ 2236Wireless Network

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)
·Linux常用命令60条( (2025-12-25 00:50:40)
·nginx 监听一个端口 (2025-12-25 00:19:30)
·整个互联网就没有一 (2025-12-25 00:19:27)