线段树-单点更新
team79
我在努力。
展开
-
hdu 2795 线段树
题意: 在一个长宽为h*w的黑板上贴海报,每张海报为1*wi,问新贴的海报能贴的最大高度,若不能贴则输出-1,注意贴海报的时候总是靠左贴。思路: 线段树,因为n最大只有200000,所以当h取min(h,n)即可,最后数组只需开到8000000,然后Max【】保存该区间内能放的最大宽度,然后在query的时候顺便更新即可AC代码如下:#include原创 2014-03-11 10:50:19 · 648 阅读 · 0 评论 -
hdu 1754 线段树
AC代码如下:#include #include #include #include using namespace std;#define MAX 220000int Max[4*MAX];//注意这里int leftchild( int parent ){ return parent * 2;}int rightchild( int parent ){原创 2014-02-24 18:26:36 · 755 阅读 · 0 评论 -
hdu 1394 线段树
求出最初的的逆序数之后,有公式直接求其他的。。。。很容易推,自己推。。。。AC代码如下:#include #include #include #include using namespace std;#define MAX 5000int sum[4*MAX];void PushUp( int rt ){ sum[rt] = sum[rt*2] + sum[rt*2+原创 2014-02-24 20:27:12 · 806 阅读 · 0 评论 -
hdu 1166 线段树
AC代码如下:#include #include #include #include using namespace std;#define MAX 50000int sum[4*MAX];void PushUp( int rt ){ sum[rt] = sum[rt*2] + sum[rt*2+1];}void built( int l, int r, in原创 2014-02-24 18:47:07 · 696 阅读 · 0 评论 -
poj 2886 线段树
首先要打表找出1-N中因数最多的数K保存起来然后每次在求的时候直接着第K个跳出的即可然后num【root】表示l到r还有多少人未跳出因为每次剩余的个数知道,moves【i】知道,所一可以求出此次是要求当前未跳出的人中间的第几个,找出其编号即可然后一直循环K次AC代码如下:#include #include #include #include #include us原创 2014-03-12 15:56:00 · 900 阅读 · 0 评论 -
poj 2828 线段树
思路:从后往前推,那么最后一个人肯定能在他想的位置上,倒数第二个人时,对与他来说当时只有i-1个人 他要在pos【i】个人的后面,那么找出除去倒数第一个人的第pos【i】+1个空位在哪即可那么num【root】表示l到r还有几个空位,每次找出第pos【i】+1个空位在哪即可AC代码如下:#include #include #include #include using na原创 2014-03-11 21:51:45 · 581 阅读 · 0 评论 -
zoj 3772 线段树--单点更新
题意:给一个序列An有m个询问,每个询问包括l和r定义f(l) = a[l], f(l+1) = a[l+1], f(x)=f(x-1) + a[x] * f(x-2), x >= l + 2;对每个询问,求f(r);当x>=l+2时,f(x)=f(x-1) + a[x]* f(x-2), 所以就有递推式所以当r>=l原创 2014-04-06 22:39:11 · 689 阅读 · 0 评论 -
zoj 2900 DP(线段树优化)
同样是暴力,别人能过,我不能过,sheng h原创 2014-04-12 10:52:54 · 674 阅读 · 0 评论 -
hdu 4893 线段树
比赛的时候直接套模板。。。。有个地方忘记原创 2014-07-29 19:56:51 · 603 阅读 · 0 评论