
树状数组&&线段树
文章平均质量分 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 · 420 阅读 · 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 · 412 阅读 · 0 评论 -
poj 3468
线段树区间修改入门题目。快被这个长整形给整死啦。以后如果对自己的算法的正确性有80%的把握,就去看一下细节,非常认真的看一遍,一行一行的看,这样其实更省时间,就比如我这次调来调去,调了4个多小时,最后才突然发现。//线.3段树区间修改#include #include #include using namespace std;const int maxn=100000;__int6原创 2013-01-08 16:25:55 · 414 阅读 · 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 · 473 阅读 · 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 · 417 阅读 · 0 评论 -
poj 3277
复习了下线段树线段树的区间修改这道题有调试了两个多小时,怎么没进步啊,wa的原因是两个int形相乘,结果如果是long形,不仅结果的变量要用long,这两个数也得是long形,不然仍会溢出,原来就犯过同样的错误,怎么又犯了,还有找了那么长时间,k靠!!!!!!!!!!!!还有还有,如果要组成if else 语句,要有括号就都有,不能只有一个有#include #include原创 2013-03-09 18:59:14 · 870 阅读 · 0 评论 -
poj 2828
线段树点更新。最直观的想法就是用链表模拟,发现数据量太大,不可能。然后看能否直接推出每个人在最终序列的位置。很显然,最后一个插入的人插入的位置就是他在最终序列中的位置,先确定了最后一个人的位置。然后看倒数第二个,先不考虑最后一个人的插入,在他前面所排的人的个数有且仅为他插入的位置,那在最终的序列中不包括最后一个人,他前面的人数肯定有且仅为 pos[i]。也就是在长度为n的序列中,不包括最后一个原创 2013-08-07 01:01:33 · 704 阅读 · 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 · 868 阅读 · 0 评论