线段树学习(二)

写的很水。。大家绕道走吧。

学了十天了都。

刷了快30题了,水题居多= =。。基本线段树题型也就这样了吧。不过求区间第K数的我一直没做,没太理解怎么做。

大致分为这几类

操作:

1、区间覆盖,染色啊,异或啊,加上一个数,乘一个数,都变成某个数啊神马的。

2、涉及矩形的一些方法。

3、区间单值更新。

4、类似二分的查找位置。

5、类似约瑟夫环的一些东东。

6、。。。。


询问:

1、区间最值,第K值。

2、区间和,各种和。

3、区间连续区域的位置,连续区域最大长度。

4、和DP一起,区间最长XX子序列神马的。

5、。。。。


目前见过的就这几种吧,其实看起来蛮少的。恶心的是好几种操作,好几种询问混到一道题上,想shi。。

而且写线段树特别需要头脑清楚,因为设计好线段树的域很重要,而且需要想清楚各种更新,稍不留神就挂了。

能用函数写尽量用函数,要不写着写着会晕的。

LAZY标记是个很强大也很讨厌的东东 T T 。。。它省了好多时间,不过更新细节需要狠狠注意。

二维线段树我只会用树套树解决很水的问题,什么四分树不会,见的题不多。

合适的节点设计会省事很多,我越来越懒了 = =。。struct里加了好几个函数。


我的一维线段树的定义。不过就纠结的是,不能使用名字为len的变量了 = =。。

struct Tnode{
    int l,r,val;
  	long long sum;
    int len() { return r - l;}
    int mid() { return MID(l,r);}
    bool in(int ll,int rr) { return l >= ll && r <= rr; }
    void lr(int ll,int rr){ l = ll; r = rr;}
};
二维的,基本和一维函数都差不多。

struct T2node
{ 
    int l,r;
    Tnode son[MAXM<<2];
    int len() { return r - l;}
    int mid() { return MID(l,r);}
    bool in(int ll,int rr) { return l >= ll && r <= rr; }
    void lr(int ll,int rr){ l = ll; r = rr;}
    
};


总之。。。头脑清醒很重要。。。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值