usingnamespacestd; LL tree[4*N+1];// 线段树 LL lz[4*N+1];// 延迟标记 LL n,t; set< LL > ans; (将所有颜色用set装起来,利用set自动去重的性质,最后set的数有几个,就是有多少海报) // 创建线段树 voidbuild(LL node,LL l,LL r){ if(l == r){ tree[node]=0; ret
例如,在建造线段树空间不够的情况下,可以考虑离散化。 使用STL算法离散化: 思路是:先排序,再删除重复元素,最后就是索引元素离散化后对应的值。 假定待离散化的序列为a[n],b[n]是序列a[n]的一个副本,则对应以上三步为: sort(sub_a,sub_a+n); //size为离散化后元素个数 int size=unique(sub_a,sub_...
首先遍历右端点范围r,用线段树维护每一位到r的区间中有多少种颜色,记为c 则处理到第a[i]个段时,将(last[a[i]],i]区间+1 如r=6时 a={3,1,5,2,4,1} 处理第6位之前c={5,4,3,2,1,0} last[a[6]]=2,然后将区间(2,6]+1 c={5,5,4,3,2,1} 此时,在询问中找右端点为r的询问[l,...
用平行与y轴的直线自左向右平移,分别与矩阵左边界右边界相遇 y轴上设置线段树记录区间覆盖长度 遇到一边界时,计算面积,用下一边界减去当前边界,获矩形宽,取线段树区间覆盖长度获矩形长,遂得面积 若为左边界,表对应区间覆盖数增,否则减 以此往复 代码(以LuoguP5490为例) #include <iostream> #include <cstdlib> ...
离散化 简而言之 就是把区间缩小 但是相对大小不变 这样就能用线段树维护了 当然 还有一个注意点就是 离散的区间是[l,mid],[mid,r] 而不是[l,mid],[mid+1,r]. 至于为什么这样 可以用反证法~~如果[mid,mid+1]之间有一个海报怎么存贮? 奉上代码: ...
题目大意:有N张海报,现在按顺序将这些海报贴在墙上,每张海报占的[l,r],问最后墙上能看到几张海报 解题思路:线段树的区间修改,但是这题数据有点大,所以要离散化下 接着就是进行区间修改了,但是这题有个坑点,如果直接离散话的化,有可能会错的 假设有三组数据,[1,10], [1,4] [6,10] ...
1. 离散化 + 权值线段树/权值树状数组2. CDQ 分治 算法1: 离散化+权值线段树 维护区间信息的线段树,例如区间和,区间最大/最小值,也叫区间线段树。 权值线段树维护元素值的计数,节点的位置代表元素值,节点的值代表元素的数量,其中叶子节点代表特定元素的数量,非叶子节点代表一个取值范围的元素的数量。 每来一个新...
//线段树+离散化+扫描线 //2010年7月21日19:35:45 //Coded By abilitytao #include<iostream> #include<cmath> #include<algorithm> usingnamespacestd; #defineMAXN 10010 structSTnode//线段树的节点 { intl,r; intlen;//区间内代表的长度
又一道成段更新的线段树染色问题来喽。 1.用map来离散化,结果TLE了。。。然后改用数组存,用二分查询位置,63MS过了,看来以后都 不要再用map了。 2.水过了之后,翻翻傻崽的博客,结果发现自己确实是水过的Orz...主要是离散化会产生一个问 题(摘自傻崽博客): ...
离散化:数据处理中的关键技巧 在算法竞赛的世界里,离散化是一种不可或缺的策略,尤其是在数据结构题目的解决中,它如同一把灵活的钥匙,解锁了数据范围限制的难题。想象一下,当你满怀期待地面对一道线段树题目,却发现数据范围竟然高达10的10次方,常规方法显然无法应对,这不仅可能导致分数大打折扣,...