![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树&&树状数组
文章平均质量分 56
sky_zdk
这个作者很懒,什么都没留下…
展开
-
poj 3468 A Simple Problem with Integers
#include#define N 111111#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1long long int add[N<<2];long long int sum[N<<2];void pushup(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void pushdown(in原创 2017-03-08 11:09:01 · 210 阅读 · 0 评论 -
poj 2309
#includeusing namespace std;int main(){ int T; scanf("%d",&T); while(T--) { long long x; scanf("%lld",&x); printf("%lld %lld\n",x-(x&-x)+1,x+(x&-x)-1); }}原创 2017-04-15 19:10:17 · 293 阅读 · 0 评论 -
poj 2029 树状数组
#include#include#define MAX_N 120#define MAX(x,y) ((x)>(y)?(x):(y))int bit[MAX_N][MAX_N];int n,m;void add(int i,int j){ for(int k=i;k<=n;k+=k&-k) for(int p=j;p<=m;p+=p&-p) bit[k][p]+=1;}in原创 2017-04-15 20:10:06 · 267 阅读 · 0 评论 -
hdu 2852 (求某个序列第k大的值,可以任意删除其中的元素和添加元素)
#include#include#define MAX_N 100010int bit[MAX_N],count[MAX_N];void add(int i,int v){ while(i<=MAX_N) { bit[i]+=v; i+=i&-i; }}int sum(int i){ int res=0; while(i>0) { res+=bit[i];原创 2017-04-16 07:01:16 · 387 阅读 · 0 评论 -
hdu 1754
#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define MAX(x,y) ((x)>(y)?(x):(y))#define MIN(x,y) ((x)>(y)?(y):(x))#define INF 0x3f3f3f3fusing namespace std;int t[200000<<2],d原创 2017-04-16 15:44:51 · 242 阅读 · 0 评论 -
hdu 2795
#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define MAX(x,y) ((x)>(y)?(x):(y))using namespace std;int w,h,t[800020];void build(int l,int r,int rt){ t[rt]=w; if(l==r) ret原创 2017-04-16 17:08:30 · 342 阅读 · 0 评论 -
poj 2828
#include#include#define MAX(x,y) ((x)>(y)?(x):(y))#define MAX_N 200010#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;int lo[MAX_N],v[MAX_N],co[MAX_N],ans[MAX_N]; int t[MAX原创 2017-04-16 20:32:51 · 248 阅读 · 0 评论 -
poj 2182 线段树
#include#include#define MAX(x,y) ((x)>(y)?(x):(y))#define MAX_N 80010#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;int lo[MAX_N],v[MAX_N],co[MAX_N],ans[MAX_N]; int t[MAX_原创 2017-04-16 20:53:49 · 341 阅读 · 0 评论 -
poj 1698 线段树
#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define MAX_N 100010int t[MAX_N<<2],d[MAX_N<<2];void pushup(int rt){ t[rt]=t[rt<<1]+t[rt<<1|1];}void pushdown(int l,int r,int原创 2017-04-17 12:48:07 · 229 阅读 · 0 评论 -
poj 3468 线段树
#include#define MAX_N 1010#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1long long int t[MAX_N<<2],d[MAX_N<<2],b[MAX_N];void pushup(int rt){ t[rt]=t[rt<<1]+t[rt<<1|1];}void pushdown(int l,in原创 2017-04-17 13:20:42 · 242 阅读 · 0 评论 -
poj 2104 主席树
#include#include#includeusing namespace std;struct node1{ int ls,rs; int sum;}t[3000000];int tot; int build(int l,int r){ int k=tot++; if(l==r) { t[k].sum=0; return k; } int m=(l+r原创 2017-05-13 19:26:07 · 214 阅读 · 0 评论 -
hdu 3911 线段树的区间合并
#include#include#include#include#include#define N 500010#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;int s1[N],s2[N],l1[N],r1[N],l2[N],r2[N],d[N];inline int MAX(int a,原创 2017-07-01 15:30:14 · 286 阅读 · 0 评论 -
bzoj 1798 线段树
给定一串数字,给(l,r)中区间中的所有数加上某一个数,或者乘上某一个数,并且查询某一区间内所有数字之和原创 2017-07-01 16:51:52 · 158 阅读 · 0 评论 -
poj 3321 计算一个树的子树共有多少节点
#include#include#define MAX_N 100010using namespace std;struct apple{ int to,next;}A[MAX_N<<1];int head[MAX_N],cnt,in[MAX_N],out[MAX_N],bit[MAX_N],k,n,apple[MAX_N];void add_edge(int from,int原创 2017-04-15 08:34:41 · 374 阅读 · 0 评论 -
poj 2481Cows 树状数组
如果我们先对E从大到小排序,这时候我们对于每个cow,只需要考虑这个奶牛前面的奶牛(后面的奶牛E比他小,不可能比他强壮),计算这个奶牛前面有几个奶牛的S小于其S,就可以了#include#include#include#define MAX(x,y) ((x)>(y)?(x):(y))#define MAX_N 100010using namespace std;int bit[MAX原创 2017-04-14 21:30:34 · 301 阅读 · 0 评论 -
poj 2991 Crane
#include#include#include#define PI acos(-1.0)#define N 10011#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1double sx[N<<2],sy[N<<2];int sd[N<<2],degree[N];void pushup(int rt){ sx[rt]=sx[rt原创 2017-03-08 12:45:12 · 297 阅读 · 0 评论 -
poj 1195 Mobile phones(树状数组二维)
这是道模版题,直接套模版就好了。。。。#include#define N 1100int n;int bit[N][N];void add(int x,int y,int v){ int i,j; for(i=x;i for(j=y;j bit[i][j]+=v;}int sum原创 2017-03-09 13:55:31 · 217 阅读 · 0 评论 -
poj 1990 moofest
又被快排坑了,用sort就ac,自己写的qsort就超时#includeusing namespace std;#define LL long long#define N 20000+16LL n;LL bit[4][N];struct node{ LL x,v;}C[N];void qsort(LL l,LL r){ LL i,j; struct node x;原创 2017-03-19 19:49:06 · 225 阅读 · 0 评论 -
poj 2155Matrix
#include#define N 1000+16int bit[N][N];int n;int lowbit(int x){ return x&(-x);}void add(int x,int y){ int i,j; for(i=x;i for(j=y;j原创 2017-03-09 22:19:52 · 297 阅读 · 0 评论 -
poj 3109 Inner Vertices
#include#include#includeusing namespace std;#define N 200000int n,hash[N],ans[N];struct node{ int x,y;}data[N];int t[N];void add(int i,int x){ while(i<=n) { ans[i]+=x; i+=i&-i; }}原创 2017-03-20 19:20:11 · 261 阅读 · 0 评论 -
poj 2763 求任意树的2个节点之间距离和修改2点之间的距离
#include#include#include#define MAX_N 102000using namespace std;struct point{ int to,id,next;}G[MAX_N<<1];int head[MAX_N],depth[MAX_N],bit[MAX_N<<1],in[MAX_N],out[MAX_N],parent[21][MAX_N],vs[原创 2017-04-07 16:09:03 · 637 阅读 · 0 评论 -
poj 3171 dp+线段树优化
声明一点:网上的解答 题目都没看清!!!!,害我整整2天改代码。。。。。 首先给定M,E ,然后给出其它区间的范围 注意 M 然后注意一点 M不一定是0,可能是其它的数#include#includeusing namespace std;#define INF 0x3f3f3f3f#define l原创 2017-03-30 12:24:12 · 323 阅读 · 0 评论 -
hdu 1166 敌兵布阵
#include#includeusing namespace std;int n;int bit[500017];void add(int i,int v){ while(i<=n) { bit[i]+=v; if(bit[i]<0) bit[i]=0; i+=i&-i; }}int sum(int i){ int res=0; while(i>0原创 2017-04-10 20:51:34 · 229 阅读 · 0 评论 -
poj 3667 线段树(区间合并)
#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define MAX(x,y) ((x)>(y)?(x):(y))#define MAX_N 50001int d[MAX_N<<2],L[MAX_N<<2],R[MAX_N<<2],T[MAX_N<<2];void build(int l,int r,i原创 2017-04-17 22:07:43 · 282 阅读 · 0 评论 -
poj 2528 线段树 离散化()
#include#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define MAX_N 20001using namespace std;int L[MAX_N],R[MAX_N],d[MAX_N<<3],t[MAX_N<<3];int ans; int flag;void update1(in原创 2017-04-18 20:54:45 · 441 阅读 · 0 评论 -
poj 2352 Stars(树状数组)
#include#includeusing namespace std;int bit[38000];int n;void add(int i){ while(i<=32002) { bit[i]+=1; i+=i&-i; }}int sum(int i){ int res=0; while(i>0) { res+=bit[i]; i-=i&-i;原创 2017-04-14 19:15:08 · 238 阅读 · 0 评论 -
poj 3067 树状数组求逆序数(n条线段相交的交点个数)
#include#include#includeusing namespace std;int n,m,k;int bit[5000];struct line{ int x,y;}L[500000];bool cmp(line a,line b){ if(a.x==b.x) return a.y<b.y; else return a.x<b.x;}void add原创 2017-04-14 19:55:46 · 465 阅读 · 0 评论 -
uva 11525 树状数组 求第k大数
#include#includeusing namespace std;int bit[50050],n;void add(int x,int v){ while(x<=n){ bit[x]+=v; x+=x&-x; }}int sum(int x){ int res=0; while(x>0){ res+=bit[x]; x-=x&-x; } retu原创 2017-09-07 21:19:04 · 348 阅读 · 0 评论