
线段树
文章平均质量分 55
double1994
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ 2528 Mayor’s posters
离散化+线段树,第一个离散化题,大概也是从这题开始比较了解lazy思想。query函数里一开始少了一次pushdown结果WA了一次代码:#include#include#include#include#include#includeusing namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1原创 2013-08-16 17:47:22 · 545 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers
线段树lazy标记。正在看splay,碰到顺便复习下。原创 2014-07-06 11:34:20 · 496 阅读 · 0 评论 -
POJ 2886 Who Gets the Most Candies?
线段树 + 反素数。写的很挫。。。gu原创 2014-04-25 10:18:04 · 499 阅读 · 0 评论 -
SPOJ 2815. Increasing Subsequences
dp,开50棵线段树,每棵存到当前位置连续长为k的序列总数。注意代码中有一需要注意的地方,即当前数为最小数时,前一棵树的总和必然为0,不能通过求p - 1的总和数来求,此时p - 1 为-1会导致出错。另外,没离散化1e5超时,离散化1e4过了,spoj真是卡常数。。。#include #include #include #include #include #include usi原创 2014-03-25 14:42:23 · 848 阅读 · 0 评论 -
HUOJ 1394 Minimum Inversion Number
本题两种解法,暴搜,线段树,线段树只是处理最初序列,找出最初的逆序数,之后每次移动为当前逆序数+比移动数大的数-比移动数小的数。做本题时完全没有想法,完全没有~copy胡浩大神代码,第一次抄错题...然后抄完发现无法理解,耗了很久,最后再discuss里找到一位暴搜和线段树都过了。先看暴搜了解了思路。又慢慢看懂了线段树。说说线段树找最初序列逆序数的思路:先先建一个2^x>n的二叉树,每原创 2013-08-11 11:44:24 · 720 阅读 · 0 评论 -
POJ 1436 Horizontally Visible Segments
线段树,注意当某单位长度两端点被覆盖后中间部分仍然可与后面相连,考虑到这种情况,将端点值乘2,一点表示端点,一点表示线段。很久没写线段树,完全不熟,一开始没有pushup...写了4个小时。真挫。确定三角形时稍微处理了下,但三个for还是有点大,波神说可以用类似状态压缩的东西搞定#include#include#include#include#define lson l,m,r原创 2013-11-24 21:41:21 · 535 阅读 · 0 评论 -
Uval 1090. In the Army Now
线段树求逆序数,做过这样的题。初始化不彻底,应该是n#include#include#include#define N 10005#define lson l,m+1,rt<<1#define rson m,r,rt<<1|1int n,k;int a;int sum[N<<2];int mx;int ptr;void Init(){ for(int i=0原创 2013-11-02 21:08:46 · 608 阅读 · 0 评论 -
Ural 1126 Magnetic Storms
求从头到尾所有相邻三个数中最大者并输出。范围略大,直接算应该超时。线段树查询完成。#include#include#include#includeusing namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int N=25005;int s[N];int mx[N<<2];void原创 2013-10-16 16:13:20 · 562 阅读 · 0 评论 -
Ural 1028. Stars
简单线段树,以前做过一样的题。唯一的问题是很久没写,忘记数组要开MAX#include#include#include#includeusing namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define N 50000int n;int sum[N<<2];int r[N];void I原创 2013-10-22 10:39:20 · 508 阅读 · 0 评论 -
2828 Buy Tickets
考思维的一题,从后往前更新,线段树维护所剩余的空位置。线段树还真是需要灵活运用...因为知道是线段树的题,一开始直接暴力更新,TLE,然后...discuss...太不给力了代码如下:#include#include#include#include#define max(a,b) ((a)>(b)?(a):(b))#define min(a,b) ((a)<(b)?(a):(b))原创 2013-08-12 17:44:28 · 526 阅读 · 0 评论 -
HDOJ 1542 Atlantis
线段树扫描线的应用,每一个矩形将其抽象为上下两条边,上下边区分为f=-1,f=1,离散化横坐标,按横坐标建立线段树,然后将每条边按纵坐标高度排序。接下来的操作可以想象为一条线由下往上扫描,每次扫过两纵坐标之间的区域。用cover[rt]记录出现下边比上边多的次数,当cover[rt]不为0时表示此段纵坐标区间内,rt表示横坐标之间的区域矩形面积可以计算。每次pushup,sum表示当前区间原创 2013-08-19 17:41:55 · 531 阅读 · 0 评论 -
POJ 3667 Hotel
线段树区间合并,查询最靠前满足大小的连续空间第一个位置。lsum记录左边开始最大连续子空间,rsum记录右边,msum记录区间里最大连续空间,每次维护烤炉左右边界合并的情况。#include #include #include#include#includeusing namespace std;#define lson l,m,rt<<1#define rson m+1,r,r原创 2013-08-18 21:15:16 · 497 阅读 · 0 评论 -
HDOJ 3308 LCIS
跟POJ3667hotel差不多,三个数组分别记录左右和总区间,维护时注意左右,重点是query函数,没啥想法,这里参考了下别人的代码。单独拉出query函数吧int query(int L,int R,int l,int r,int rt){ int m=(l+r)>>1; if(L int ans=0; if(R else if(L>m原创 2013-08-18 21:25:29 · 674 阅读 · 0 评论 -
CF 444C DZY Loves Colors
线段树,lazy。三个变量,col, sum, add。add为lazy标志,sum为区间原创 2014-07-07 16:19:53 · 694 阅读 · 0 评论