线段树
文章平均质量分 77
swust_wbh
这个作者很懒,什么都没留下…
展开
-
西南科技大学第九届程序设计竞赛B题解题报告(线段树版)
题目链接http://acm.swust.edu.cn/oj/contest/58/908/题目大意:给你N个物品,每个物品有两个属性V1,V2,把它插入到k+1的位置(类似数组的插入),求它前一个物品的V1,不存在输出-1,和后一个物品的V2,不存在输出-1。解题思路,可以维护一颗线段树,求得最后物品的序列,题目中样例最终的序列就是4,1,5,2,3,。表示第1个物品最终在4这个位置,第原创 2013-05-22 00:14:14 · 1352 阅读 · 0 评论 -
HDU 4605(线段树)
恶心的1B...#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include #include #include #include #include #include #include #include #i原创 2013-09-24 00:28:29 · 446 阅读 · 0 评论 -
HDU 4614(线段树)
成端更新+区间合并#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include #include #include #include #include #include #include #include #原创 2013-10-08 22:26:04 · 524 阅读 · 0 评论 -
UESTC 1546(线段树,成段更新,区间合并)
这个题有一点非常重要,就是任意一个非法的序列,我们在它的左边添加若干个"(",右边添加若干个")",那么一定能够变成一个合法的序列。在这里就不证明了,比如"()))((",我们在它的左边添加两个"(",右边两个")",序列变成"((()))(())",就成了一个合法的序列了!因此在每一个区间,我们记录它缺少的左括号数needl,缺少的右括号数needr,那么区间合并的问题就解决了。这个原创 2013-05-15 18:52:21 · 624 阅读 · 0 评论 -
hdu 3397(线段树综合题)
这个题算是把线段树的基本操作融合在了一起,0和1是区间覆盖,2是区间异或,3是区间求和,4我们需要区间合并。思维难度并不大,关键就是我们要把每一个操作做好。我们一个一个分析操作对于0,1,用一个标记cover解决对于2,用一个标记rev解决,但是cover一个区间的时候,显然rev标记要清除。对于3,在节点设置一个sum,代表1的个数,进行区间求和就行了。对于4,我们设置m原创 2013-05-15 10:54:06 · 509 阅读 · 0 评论 -
hdu 3954(比较特别的成端更新)
#include#include#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define inf 0x7f7f7f7f#define N 100005struct node{ int e;//获得经验标记 int maxexp;原创 2013-05-28 19:39:02 · 462 阅读 · 0 评论 -
hdu 2711(线段树单点更新)
从后往前插入序列来维护线段树,线段树记录区间的空位数。线段树功能 :query:单点更新与查询#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define N 100005int cnt[N<<2];int ans[N];i原创 2013-05-14 13:44:55 · 529 阅读 · 0 评论 -
hdu 3308(单点更新,区间合并)
没什么好说的,赤裸裸的线段树...#include#include#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define N 100005struct node{ int most; int left,right;原创 2013-05-14 19:22:37 · 393 阅读 · 0 评论 -
POJ 3667(线段树,区间合并,成段更新)
比较经典的题目,题目中有两种成段覆盖的方式,因此在节点设置两个标记cover(房间清空),set(房间注满)。再每个节点设置一个sum表示区间最长连续空房间。然后设置lsum表示包括最左边房间的最长连续空房间,rsum表示包括最右边房间的最长连续空房间。#include#include#include#include#includeusing namespace st原创 2013-05-14 18:24:04 · 426 阅读 · 0 评论 -
hdu 3577(线段树的成段更新)
这个题有一点要考虑到,就是某人从a站坐到b站,他在b站就下车了,他在车上乘坐的区间为a到b-1。这里贡献一组测试数据13 104 55 66 77 89 101 41 102 94 63 8输出Case 1:1 2 3 4 5 6 7 8 然后就是求区间最大覆盖值了。线段树功能:updata:成段更新,quer原创 2013-05-14 15:10:45 · 577 阅读 · 0 评论 -
HDU 3564(线段树+最长上升子序列)
这题的难点在于要倒着去遍历这个序列,求出最终的序列,然后就是求最长上升子序列了。要求最终的序列,那么维护一颗线段树,节点记录空位的数量cnt。线段树功能 query:单点更新#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#d原创 2013-05-13 21:25:17 · 761 阅读 · 0 评论 -
hdu 4553(线段树成端更新,区间合并)
和poj 3667 Hotel差不多,三种操作。节点信息有struct node{int ds;//基友标记int ns;//女神标记int st;//学习标记int most,lmost,rmost;//最长空时间,最左空时间,最右空时间int tmost,tlmost,trmost;//女神专用最长空时间,最左空时间,最右空时间}seg[N1.DS,原创 2013-05-27 15:50:52 · 647 阅读 · 0 评论 -
UESTC 1425(线段树)
该题有两种操作,a和q。对于a,我们在每一个节点设计一个add标记。对于q,首先我们在每个节点设计一个lcis代表该区间的最长上升子串。显然,这个值和三个值有关。1.左儿子的lcis2.右儿子的lcis3.左右儿子合并lcis现在关键就是解决3,我们在每个节点设计四个值,left,right,lmost,rmost,分别代表区间最左边的值,最右边的值,最左边的最长上原创 2013-05-10 11:40:19 · 621 阅读 · 0 评论 -
Codeforces 444C(线段树)
区间颜色不一致就更新到底,否则lazy标记#include#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define N 100005#define ll __int64struct node{ bool same; ll c原创 2014-07-07 01:24:50 · 1658 阅读 · 0 评论