hdu 1698
来源:互联网 发布:软件测试个人职业规划 编辑:程序博客网 时间:2024/06/16 04:07
线段树成段更新。。
采用延迟标记法
#include<iostream>#include<algorithm>using namespace std;#define for if(0);else for#define MAXN 100005#define lson u<<1#define rson u<<1|1struct Node{int lef,rig,sum;int delta;//增加量}T[MAXN<<2];void Build(int u,int l,int r){T[u].lef=l;T[u].rig=r;T[u].delta=0;if(l==r){T[u].sum=1;return;}int mid=(l+r)>>1;Build(lson,l,mid);Build(rson,mid+1,r);T[u].sum=T[lson].sum+T[rson].sum;}void Update(int u,int l,int r,int v){if(l<=T[u].lef&&T[u].rig<=r){T[u].delta=v;T[u].sum=(T[u].rig-T[u].lef+1)*v;}else {if(T[u].delta){//如果u的delta不为0,那么久要将该delta传到u的左右节点中T[lson].delta=T[u].delta;T[rson].delta=T[u].delta;T[lson].sum=(T[lson].rig-T[lson].lef+1)*T[u].delta;T[rson].sum=(T[rson].rig-T[rson].lef+1)*T[u].delta;T[u].delta=0;}if(r<=T[lson].rig)Update(lson,l,r,v);else if(l>=T[rson].lef)Update(rson,l,r,v);else {Update(lson,l,T[lson].rig,v);Update(rson,T[rson].lef,r,v);}T[u].sum=T[lson].sum+T[rson].sum;}}int main(){int N,Q,t;int x,y,z;int cas=0;scanf("%d",&t);while(t--){scanf("%d%d",&N,&Q);Build(1,1,N);while(Q--){scanf("%d%d%d",&x,&y,&z);Update(1,x,y,z);}printf("Case %d: The total value of the hook is ",++cas);printf("%d.\n",T[1].sum);}return 0;}
- hdu 1698
- hdu 1698
- hdu 1698
- hdu 1698
- HDU 1698
- HDU 1698
- hdu 1698
- hdu 1698
- hdu 1698
- hdu 1698
- hdu 1698
- hdu 1698
- hdu 1698
- hdu 1698
- hdu 1698
- hdu-1698
- hdu 1698
- HDU 1698
- 浅析armlinux-paging_init()->free_area_init_core()函数
- 【Python入门】面面俱到的资源收集
- SSH(Spring+Struts+Hibernate)学习笔记(一)概览
- 架构设计专栏00--目录
- 面试题材 求两个文件的相对路径
- hdu 1698
- Oracle SQL行列转换应用实例一则
- 【转载】28个Unix/Linux的命令行神器
- Android之EditView 阻止软键盘自动弹出
- php使用include制作模板页
- PL/SQL-FOR UPDATE 与 FOR UPDATE OF的区别
- Finder 及其子类的分析
- Nginx + chunkin for windows编译指南
- mysqldump导数据库数据不加锁(InnoDB)