树状数组&&线段树
文章平均质量分 75
lj_acm
这个作者很懒,什么都没留下…
展开
-
hdu 2492
树状数组 #include #include #include using namespace std; const int maxn1=100000; const int maxn2=20010; int c[maxn1+10],v[maxn2],l[maxn2],r[maxn2]; int n; int lowbit(int x) { return x&(-x); } void ad原创 2013-01-01 18:53:07 · 379 阅读 · 0 评论 -
poj 3264
线段树入门题 #include #include #include using namespace std; const int maxn=50000; const int inf=1<<30; int n,q; int minv[maxn*3],maxv[maxn*3]; void init() { for(int i=0;i<maxn*3;i++) { minv[i]=inf;原创 2013-01-07 18:52:02 · 357 阅读 · 0 评论 -
poj 3468
线段树区间修改入门题目。快被这个长整形给整死啦。以后如果对自己的算法的正确性有80%的把握,就去看一下细节,非常认真的看一遍,一行一行的看,这样其实更省时间,就比如我这次调来调去,调了4个多小时,最后才突然发现。 //线.3段树区间修改 #include #include #include using namespace std; const int maxn=100000; __int6原创 2013-01-08 16:25:55 · 375 阅读 · 0 评论 -
poj 3321
主要是dfs,只要dfs这一步想到,也就是怎样把问题转化为区间求和,就很容易用树状数组来求解 #include #include #include using namespace std; const int maxn= 100000; int head[maxn+10],e[maxn+10],num[maxn+10],lim[maxn+10],sumx[maxn+10],vis[maxn原创 2013-01-24 19:20:11 · 429 阅读 · 0 评论 -
poj 3067
此题不难,可以转化为求解区间内的个数和,树状数组比较便捷,结果大,用long long #include #include #include #include using namespace std; const int maxn=1000; int road[maxn+10][maxn+10]; int temp[maxn+10]; int n,m,k; long long num=0原创 2013-01-26 15:31:17 · 378 阅读 · 0 评论 -
poj 3277
复习了下线段树 线段树的区间修改 这道题有调试了两个多小时,怎么没进步啊, wa的原因是两个int形相乘,结果如果是long形,不仅结果的变量要用long,这两个数也得是long形,不然仍会溢出,原来就犯过同样的错误,怎么又犯了,还有找了那么长时间,k靠!!!!!!!!!!!!还有还有,如果要组成if else 语句,要有括号就都有,不能只有一个有 #include #include原创 2013-03-09 18:59:14 · 819 阅读 · 0 评论 -
poj 2828
线段树点更新。 最直观的想法就是用链表模拟,发现数据量太大,不可能。然后看能否直接推出每个人在最终序列的位置。很显然,最后一个插入的人插入的位置就是他在最终序列中的位置,先确定了最后一个人的位置。然后看倒数第二个,先不考虑最后一个人的插入,在他前面所排的人的个数有且仅为他插入的位置,那在最终的序列中不包括最后一个人,他前面的人数肯定有且仅为 pos[i]。也就是在长度为n的序列中,不包括最后一个原创 2013-08-07 01:01:33 · 665 阅读 · 0 评论 -
poj 3225
这道题目纠结死了,想了各种实现终于A了。还有没看清题意,空集的时候没输出“empty set”,wa到吐。 线段树成段更新。 U:把区间[l,r]覆盖成1 I:把[-∞,l)(r,∞]覆盖成0 D:把区间[l,r]覆盖成0 C:把[-∞,l)(r,∞]覆盖成0 , 且[l,r]区间0/1互换 开闭区间的问题可以把(i,i+1)抽象为一个点,最后得到2*65535+1个点,原创 2013-09-17 18:34:52 · 810 阅读 · 0 评论