HDU 1698
来源:互联网 发布:淘宝购物技巧 编辑:程序博客网 时间:2024/05/18 22:11
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1698
线段树中的成段更新。 初始权值1-n为1.每次更新的时候判断一下是否找到当前要找的区间。如果找到直接返回。。没有找到就把当前这个大区间的权值改为0,表示子节点是由不同权值构成的!
下面是AC代码:
#include<cstdio>using namespace std;#define maxn 100010struct node{ int id,l,r,m; int val;}T[maxn<<2];void build(int id,int l,int r){ T[id].id = id ; T[id].l = l ; T[id].r = r; T[id].val=1; T[id].m=(l+r)>>1; if(l==r) return; int m=(l+r)>>1; build(id<<1,l,m); build((id<<1)+1,m+1,r);}void update(int id,int l,int r,int val){ if(T[id].l==l&&T[id].r==r){ T[id].val=val; return; } if(T[id].val>0){ T[id<<1].val=T[(id<<1)+1].val=T[id].val; T[id].val=0; } if(T[id].m>=r) update(id<<1,l,r,val); else if(T[id].m<l) update((id<<1)+1,l,r,val); else{ update(id<<1,l,T[id].m,val); update((id<<1)+1,T[id].m+1,r,val); }}int count(int id){ if(T[id].val==0){ return count(id<<1)+count((id<<1)+1); } else{ return (T[id].r-T[id].l+1)*T[id].val; }}int main(){ int t,ca=1,n,Q,x,y,val; scanf("%d",&t); while(t--){ scanf("%d",&n); build(1,1,n); scanf("%d",&Q); while(Q--){ scanf("%d%d%d",&x,&y,&val); update(1,x,y,val); } int ans=count(1); printf("Case %d: The total value of the hook is ",ca++); printf("%d.\n",ans); }}
- 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
- 推荐一系列优秀的Android开发源码
- oracle数据库空间估算
- QQ界面的实现
- JavaScript中的匿名函数及函数的闭包
- SqlServer: 单用户模式下查杀相关进程实现单/多用户转换
- HDU 1698
- 项目管理
- IP api 接口 总结
- u-boot的内存分布和全局数据结构
- 菜鸟求助 MyEclips jsp 标签库URI报错 求解决之道
- PostgreSQL 安装报错 Error reading file postgresql.conf 的解决办法
- Reason: image not found解决办法
- U-BOOT start.s
- CentOS 6下安装nodejs 0.9.0