线段树
BEconfidence
坚持才是胜利之道
展开
-
sdut-2159 Ivan comes again!(set+线段树)
Ivan comes again!Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^题目描述The Fairy Ivan gave Saya three problems to solve (Problem F). After Saya finished the first problem原创 2015-04-25 23:12:32 · 543 阅读 · 0 评论 -
HDU5091 Beam Cannon(线段树扫描线)
#include#include#include#includeusing namespace std;const int maxn=40005;const int bw=20000;#define lson(x) ((x)<<1)#define rson(x) (((x)<<1)|1)int lc[maxn<<2],rc[maxn<<2],ad[maxn<<2],nd[ma原创 2015-05-04 16:21:14 · 1000 阅读 · 0 评论 -
线段树hdu1166
线段树节点的左儿子[a,(a+b)/2]右儿子[(a+b)/2,b]这个很重要把线段树当成完全二叉树算,开到3*N就可以,但最好是4*N#includeusing namespace std;int a[50005];struct { int sum; int left,right;}b[50005*4];void build(int left,int rig原创 2015-08-13 20:49:49 · 565 阅读 · 0 评论 -
线段树区间更新hdu1698
第一种是sum存放每个点的值,然后区间更新,把需要更新的父亲的sum设为-1,代表此区间有被更新过,就不由挪动子节点了。vj上跑的时间这个快一点。另一种lazy标志位,区间更新时,把lazy标志位设为1,当查找的区间含lazy过的,就变更子节点位原来的值,所以需要一个tag记录原来的值。#includeusing namespace std;#define N 100100st原创 2015-08-14 10:13:55 · 602 阅读 · 0 评论 -
线段树区间合并LCIShdu3308
#includeusing namespace std;#define N 100100int a[N];struct { int left,right,c; int ln,rn; int ls,rs,ms;}b[N*4];void pushup(int i){ b[i].ls=b[i*2].ls; b[i].rs=b[2*i+1].rs; b[原创 2015-08-14 11:40:35 · 632 阅读 · 0 评论 -
hdu3450
开始看觉得是dp,复杂度O(n^2)会超时就没做,应该是用线段树或者树状数组,加上离散化和二分法优化。 你需要一个dp[i]数组,存储的是以i为结尾的个数,结果就是dp[]之和. 离散化的部分是用一个离散化结构体,最终的hash0[]数组里存的就是num[i]的大小序号 其次便是用到了线段树的区间更新和单点查询。 二分法用在了查询与当前点符合的前部和尾部。#include<bits/stdc原创 2015-11-23 21:50:55 · 652 阅读 · 0 评论