HDU 1166 点更新段查询线段树
来源:互联网 发布:windows 10 iot core 编辑:程序博客网 时间:2024/05/16 00:39
很久没做线段树的题目了。自己想想延迟标记怎么弄...
#include<iostream>#define MAXN 55555using namespace std;int tree[MAXN<<2];void pushUp( int rt ){ tree[rt]=tree[rt<<1]+tree[rt<<1|1];}void build( int l,int r,int rt ){ if( l==r ) { scanf( "%d",&tree[rt] ); return ; } int m=(l+r)/2; build( l,m,rt<<1 ); build( m+1,r,rt<<1|1 ); pushUp( rt );}int query( int L,int R,int l,int r,int rt ){ if( L<=l&&r<=R ) return tree[rt]; int m=(l+r)/2; int ret=0; if( m>=R ) ret+=query( L,R,l,m,rt<<1 ); if( L>=m+1 ) ret+=query( L,R,m+1,r,rt<<1|1 ); if( L<m+1 && m<R ) { ret+=query( L,R,l,m,rt<<1 ); ret+=query( L,R,m+1,r,rt<<1|1 ); } return ret;}void add( int pt,int v,int l,int r,int rt ){ if( l==r ) { tree[rt]+=v; return ; } int m=(l+r)/2; if( pt<=m ) add( pt,v,l,m,rt<<1 ); else add( pt,v,m+1,r,rt<<1|1 ); pushUp(rt);}int main(){ int T,cases=1; scanf( "%d",&T ); while( T-- ) { printf( "Case %d:\n",cases++ ); int N; scanf( "%d",&N ); build( 1,N,1 ); char str[111]; getchar(); while( gets(str) ) { int n1,n2; if( sscanf(str,"Query %d %d",&n1,&n2) ) printf( "%d\n",query(n1,n2,1,N,1) ); else if( sscanf(str,"Sub %d %d",&n1,&n2) ) add( n1,-n2,1,N,1 ); else if( sscanf(str,"Add %d %d",&n1,&n2) ) add( n1,n2,1,N,1 ); else if( strcmp(str,"End")==0 ) break; } } return 0;}
- HDU 1166 点更新段查询线段树
- HDU 1754 点更新段查询最大值线段树
- [线段树 点更新 段查询]A
- HDOJ 1166 点更新段查询求和 初级线段树
- [线段树 段更新] HDU
- 线段树 点更新和段更新
- HDU 1166 敌兵布阵[线段树单点更新成段查询]
- HDU 1166 线段树(点更新)
- HDU 1166 敌兵布阵 (线段树点更新区间查询)
- hdu 1698 线段树 成段更新
- hdu 4325 线段树 成段更新
- hdu 4107 线段树 成段更新
- HDU 4027 ( 线段树 -- 成段更新)
- hdu 3577 线段树,成段更新
- hdu 1698 线段树-成段更新
- hdu 4902 线段树-成段更新
- hdu 1698 线段树 成段更新
- HDOJ 1698 段更新段查询 初级线段树
- flash自带的10种过渡效果
- POJ 3107 - Godfather
- [原创+源码]超简单:基于jQuery实现的选项卡(滑动门)效果
- 雁过也,月满西楼
- 句子翻转
- HDU 1166 点更新段查询线段树
- Linux卸载软件方法汇总
- POJ 3669 - Meteor Shower
- extern "C"的作用
- MFC中的CheckBox的使用
- 邂逅在华灯初上
- 3D玫瑰
- RDTSC汇编指令详解
- Read media