雕刻时光

just do it……nothing impossible
随笔 - 547, 文章 - 0, 评论 - 82, 阅读 - 86万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

随笔分类 -  线段树

摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4217View Code #include<stdio.h>struct data{ int l,r; int sum;}node[1962144];void build(int ll,int rr,int n){ node[n].l=ll; node[n].r=rr; node[n].sum=rr-ll+1; if(ll==rr)return ; int mid=(ll+rr)>>1; build(ll,mid,n+n); build(mid+1,rr,... 阅读全文

posted @ 2012-04-21 21:13 huhuuu 阅读(155) 评论(0) 推荐(0) 编辑

摘要:有N个人要去膜拜JZ,他们不知道JZ会出现在哪里,因此每个人有一个活动范围,只要JZ出现在这个范围内就能被膜拜,伟大的JZ当然希望膜拜他的人越多越好,但是JZ不能分身,因此只能选择一个位置出现,他最多可以被多少人膜拜呢,这个简单的问题JZ当然交给你了A_i..B_i (1 <=A_i <= B_i <= 1,000,000,000)N (1 <= N <= 50,000)44 81 25 103 5输出3思路:考虑到a,b的范围很大,N范围小,果断离散化一下,离散化以后,如果直接 add[] 暴力统计区间,会超时,考虑线段树,使用懒惰标记 500msView Co 阅读全文

posted @ 2011-11-21 19:19 huhuuu 阅读(351) 评论(0) 推荐(0) 编辑

摘要:题目种涉及到区间的查询,想到线段树View Code #include<stdio.h>int tmin=10000009,tmax=0;struct data{ int l,r; int min,max;}node[9950009];int fmax(int a,int b){ return a>b?a:b;}int fmin(int a,int b){ return a<b?a:b;}void build(int ll,int rr,int n){ node[n].l=ll; node[n].r=rr; node[n].max=-1; node[n].min=100 阅读全文

posted @ 2011-07-23 08:59 huhuuu 阅读(413) 评论(0) 推荐(0) 编辑

摘要:前面一直TLE,最终原因是因为没有将查找的压倒O(log(N))查找更新都需要遗传结构!!!View Code #include<stdio.h>structdata{intl,r;__int64all;//开始单点更新__int64hou;}node[300009];inta[100009];voidbuild(intll,intrr,intn){node[n].l=ll;node[n].r=rr;node[n].hou=0;if(ll==rr){node[n].all=a[rr];}if(ll==rr)return;intmid=(ll+rr)>>1;build(l 阅读全文

posted @ 2011-07-14 15:35 huhuuu 阅读(281) 评论(0) 推荐(0) 编辑

摘要:在单纯的更新结点时,是不需要用到遗传结构的在区间的更新时,会用到遗传结构View Code #include<stdio.h>#include<string.h>struct data{int l,r,val;}st[200009];void build(int ll,int rr,int n){st[n].l=ll;st[n].r=rr;st[n].val=0;if (ll==rr) return ;int mid=(ll+rr)/2;build(ll,mid,2*n);build(mid+1,rr,2*n+1);}void updata(int ll,int rr, 阅读全文

posted @ 2011-07-12 17:19 huhuuu 阅读(191) 评论(0) 推荐(0) 编辑

摘要:统计一定区间内颜色的不同种数开个hash,在search随时记录颜色数目做完这题:对线段树有了理解更新操作时,线段树用遗传的方法,在一个区间异化时,将有用信息遗传到子代(仅仅是子代,不是所有的子孙都遗传,这样就节约了时间)统计操作时,线段树用了区间统计(不是统计每个叶子),统计未被异化的区间(不是所有子孙都统计,又节约时间了)对于函数参数的理解:当传入的是结点下标n时,函数里考虑n+n,n+n+1的子树而不仅传入有下标,还有区间时,就要分区间是在当前树的左子树,或是右子树,或是区间同时在左右子树View Code #include<stdio.h>struct data{ int 阅读全文

posted @ 2011-07-12 10:55 huhuuu 阅读(304) 评论(0) 推荐(0) 编辑

摘要:超时是因为底层结点也更新了,背离了区间更新的大原则,所以超时View Code #include<stdio.h>struct data{ int l,r,val;}st[300009];inline int max(int a,int b){ return a>b?a:b;}void build(int ll,int rr,int n)//½¨Ê÷{ st[n].l=ll; st[n].r=rr; st[n].val=1; if (ll==rr) return ; int mid=(ll+rr)/2; build(ll,mid,2*n 阅读全文

posted @ 2011-07-11 21:56 huhuuu 阅读(237) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示