随笔分类 - 线段树
摘要:思路:本来写了一个比较短的代码,并且各函数间的重用性比较高,就是结果悲剧的超时了...就是保证每个区间只有一种操作,那么更新时就要更新子节点的子节点,需要递归更新,结果是可想而知。其实这种做法是可以过得,只要将复杂度转移到求和上去(测试数据对求和操作应该要求不严)。但那样就不能直接保存p的三种情况值,因为这样会使得常数级非常大,超时。所以就要找到多重操作并存的方法。对于置为c,这个容易解决。关键是加和乘。思路见代码注释#include#include#include#include#include#define lson(x) x>1; }}tree[Maxn*4];int ans;vo
阅读全文
摘要:思路:当k为1的时候,用二分法查询包含有f个空瓶的上界r,然后更新会方便很多,直接更新区间(a,r)了。#include#include#include#include#include#define lson(x) (x>1)#define inf 1=tree[po].r) { ans+=tree[po].r-tree[po].l+1-tree[po].left; tree[po].left=tree[po].r-tree[po].l+1; tree[po].up=1; return ; } down(po); ...
阅读全文
摘要:思路:首先将所有的查询有一个vector保存起来。我们从1号点开始dfs这颗二叉树,用线段树记录到当前节点时,走左节点的有多少比要查询该节点的X值小的,有多少大的,同样要记录走右节点的有多少比X小的,多少比X大的。小和大的x,y值题目给了。当要进行左儿子时,建该节点值插入走左的线段树,回退的时候将其删除,进入右儿子时将其插入走右的线段树,同样回退时删除。遍历完一个树,整个查询就做完了,最后输出。#include#include#include#include#include#include#define Maxn 200100#define lson(x) (x>1)#define in
阅读全文

浙公网安备 33010602011771号