poj12482 扫描线+lazy-tag】的更多相关文章

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1798 注意,应保证当前节点维护的值是正确的,lazy tag只是一个下传标记,在下传时应即时更新儿子的维护值,在修改时也应即时更新当前节点的维护值. #include <cstdio> const int maxn = 100005; int n, mod, a[maxn], m, t1, t2, t3, opr; struct Node { int ql, qr; long long…
题目链接 维护区间和,两个操作:一个是将某个区间设置成一个值,一个是将某个区间增加一个固定值 /**************************************************************/ 每走到一个区间就把lazy tag下放.下放的时候注意顺序! #include <cstdio> #include <cstring> ; struct NODE{ int l,r; int sum; int setTo,add; NODE(){setTo=ad…
采用扫描线的思想,其实是区间更新的题目 题解链接https://blog.csdn.net/shiqi_614/article/details/7819232 注意处理细节:1)因为边框上的点不算,所以要当出边入边重合时,要先更新出边,再更新入边 2)同理,在y轴上建立的线段树应该把坐标离散成互不相交的点,如(0,1),(1,2),(2,3)等开区间来代替[0,1],[1,2],[2,3],这样就能避免算入边框上的点. 怎么使用开区间?如果更新的线段是[1,2],那么实际上只能覆盖住[1,1]所…
题意: 有编号为0~n的n+1个房屋,给出每个房屋的起始价格,随后给出m种修改,每次修改都要进行输出所有房屋的价格总和.修改有两种方式:(1)政府调控,编号L~R全置为同一价格(0)房屋自行涨跌,编号L~R的房屋价格全部涨/跌一部分. 思路: 只需要一个tag+浮动的价格就可以解决这个问题了.当tag=1时,表示需要对该节点的孩子进行修改.进行何种修改?看浮动价格flo是否为0,若为0,表示需要设置为同一价格,否则,表示价格需要涨跌.当先进行set后进行add时,按照set的方式下放即可:当先进…
(题外话:这题这是ACMer的福利啊……)我非常不擅长做矩形类的数据结构一般来说,二维的问题我们要转化为一维来考虑感觉一般的手法是对一维排序,并且线性扫描这一维,然后用各种数据结构维护另一维上的最优值这道题我们首先对x排序,然后扫描x坐标这时候我们要维护2条扫描线,一左一右(应该就是two pointer)扫描线之间的长度就是要求小于等于窗口宽度随着右扫描线的移动,我们把这条扫描线上的点加到某个数据结构中随着左扫描线的移动,我们把这条扫描线的点删除显然每个点添加一次且删除一次,要做O(n)次操作…
只是列列一些要复习的,努力复习吧,有种noip退役的赶脚. 一.模拟 (这你也不会?退役吧) 二.DP 1.基础dp 2.区间dp 3.状压dp 4.树形dp 6.概率(期望)dp 7.环形dp 8.方格dp 9.背包问题 a.01背包 b.完全背包 c.多重背包 d.二进制压缩 10.线性dp 三.搜索: 1.dfs 2.bfs 3.枚举 4.启发式搜索(a*) 5.双向搜索 6.记忆化搜索 7.hash判重 8.剪枝 9.二分查找 四.贪心 (视题目而定,没什么好讲的) 五.树 1.生成树…
身为10班人,就凭标题,这道题是一定要做的. 但是做了才发现有毒....所以是信念和题解和大腿支撑了我! 先"假设"自己实力过硬,推出了结论:当区间过大时,必定存在一种方案可以输出"Yuno".剩下就是这区区几个数的乱搞了. 数据结构学傻先不动声色地敲了一个线段树维护所有的立方操作,并且我发现自从noip2015挂过lazy tag以后就再也不会写错了....这就是传说中教训的力量 然后我还是请教了一些更优秀的维护方法,不过万变不离其宗,这个常数说不要就不要了吧..…
数三角形 bzoj 3505 要知道一个公式就是(a,b)和(x,y)两点所成线段上面的整点数是gcd(a-x,b-y)-1,通过枚举原点到map上任意一点所能成的三角形,再平移,得到要去掉的三点共线的点对. 我当时弱智地弄了个O(n^6)的枚举,不过好歹还是对的拿了三十分. = =满分程序和30分程序几乎一样长. program triangle; var m,n,i,j:integer; ans,t:qword; function gcd(a,b:integer):integer; begi…
FROM http://www.lydsy.com/JudgeOnline/problem.php?id=1014 LCP问题 给定串 S[0..n] , 对于一对(a,b)其中0<a,b<n,求一个最大的k使得S[a..a+k]=S[b..b+k] 解决方法: Hash加二分 对于每个子串,我们都可以用基于多项式模大素数的hash函数进行判重. 静态LCP 静态LCP可以用DP二分解决.[详见 CQF `New LCP'] 动态LCP type1 查询居多,修改少. CQF解决方案. [详见…
线段树的裸题: 但是操作很奇怪,开方是不能lazy tag的 看来只能暴力修改了 但注意,开放开到1的时候就不用开,立一个flag就可以了 这可以大大的优化: 其实我是来复习线段树的 ..] of int64;     lazy:..] of boolean;     a:..] of int64;     n,m,ch,p,q,l,r,i:longint; procedure swap(var a,b:longint);   var c:longint;   begin     c:=a;  …