线段树
文章平均质量分 68
苏子散人
爱古风,爱代码。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
poj2352
//poj2352求该点包含的点时所有比它低的点都已经加过#include#includeusing namespace std;int a[32005];int b[32005];int tree[32001*4];void Build(int p,int l,int r,int x) //先建立0~x范围的分支{ if(l==r){ tree[p]+原创 2016-09-15 11:20:19 · 280 阅读 · 0 评论 -
poj1436(线段树lazy标记)
#include#include#include#includeusing namespace std;const int maxn=8002;bool vis[maxn][maxn];struct node{int y1,y2,x;}s[maxn];bool cmp(node a,node b){ return a.x<b.x;}int cov[maxn<<原创 2016-09-21 22:35:22 · 447 阅读 · 0 评论 -
poj2886(线段树单点更新)
/*到1号节点的距离为s的点,则该点的相对节点1的编号为(s+n)%n+1,另外此题要打表求某个数的因子个数反素数就是 对 x来说约束个数 G(x),如果 对于 i<x 有 G(i)<G(x)则称x为反素数*/#include#includeusing namespace std;const int maxn=500002;//反素数及因子个数打表int ap[40] ={1,2原创 2016-09-25 00:56:33 · 313 阅读 · 0 评论 -
poj2777(线段树lazy标记的使用)
#include#includeusing namespace std;const int maxn=100002;int tree[maxn<<2],cov[maxn<<2];void Pushup(int p){ tree[p]=tree[p<<1]|tree[p<<1|1];//通过或运算符来计数}void Pushdown(int p){ if(cov[原创 2016-09-20 21:51:18 · 283 阅读 · 0 评论 -
poj2828(Buy Tickets)(线段树单点更新)
此题的关键在于逆序更新,并且要将pos位置转化为后面的点还未插入时应当剩余的空位置//最后一个插入到该位置的人的位置是固定的,从后面进行插入操作,pos代表要插入到pos位置//则在前面插入pos时pos前面要留出pos个空位置,去掉后来插入的点#include#includeusing namespace std;const int maxn=200002;int tree[ma原创 2016-09-22 23:04:36 · 332 阅读 · 0 评论 -
hdu2795(线段树单点更新)
每个节点维护区间等于空间的最大值#include#include#includeusing namespace std;int a[200005];int tree[200005*4];int h,w,n;void Pushup(int p){ tree[p]=max(tree[p<<1],tree[p<<1|1]); //记录其子树中已经出现的点的数量}void原创 2016-09-22 19:37:46 · 279 阅读 · 0 评论 -
hdu1394(最小逆序数)(线段树单点更新)
#include#include#includeusing namespace std;int a[5005];int tree[5005*4];void Pushup(int p){ tree[p]=tree[p<<1]+tree[p<<1|1]; //记录其子树中已经出现的点的数量}void Build(int p,int l,int r){ tree[p原创 2016-09-22 19:19:32 · 440 阅读 · 0 评论 -
poj2528(贴海报)线段树离散化
//poj2528贴海报(线段树离散化)#include#include#include#includeusing namespace std;const int maxn=100005; //要开10倍的数组,否则REbool hash[maxn];int li[maxn],ri[maxn];int cov[maxn<<4];int a[maxn*3];int cnt;原创 2016-09-16 14:14:42 · 1582 阅读 · 1 评论 -
poj3468(lazy标记)
//poj3468区间成段更新,使用lazy标记#include#includeusing namespace std;const int maxn=100005;long long sum[maxn<<2],cov[maxn<<2];int a[maxn];void Pushup(int p){ sum[p]=sum[p<<1]+sum[p<<1|1]; //该区间原创 2016-09-15 22:12:35 · 261 阅读 · 0 评论 -
hdu1698(lazy标记的使用)
#include#includeusing namespace std;const int maxn=100005;int sum[maxn<<2],cov[maxn<<2];void Pushup(int p){ sum[p]=sum[p<<1]+sum[p<<1|1]; //该区间小棒的质量和}void Pushdown(int p,int m) //将该区间的标记向原创 2016-09-15 21:12:49 · 250 阅读 · 0 评论 -
poj2705
#include#include#includeusing namespace std;int a[200005];int tree[200005*4];int h,w,n;void Pushup(int p){ tree[p]=max(tree[p<<1],tree[p<<1|1]); //记录其子树中剩余的最大空间}void Build(int p,int l,i原创 2016-09-15 17:22:15 · 407 阅读 · 0 评论
分享