题目在这里
| 3368 |
Accepted |
7312K |
1829MS |
C++ |
6936B |
题意为给你一组数据,再给定一组区间,问你这个区间内出现次数最多的元素的次数是多少。
我还记得这题是学校校赛基础的题目,当时懵懵懂懂的用分治交了6次TLE。知道了线段树之后才后悔每更早的认识她。
一段区间内的多次出现的数的次数,在线段树查询中有以下几种情况
1.次数最多的都集中在某一结点的左区间内
2.次数最多的都集中在某一结点的有区间内
3.次数最多的在左右两边都有,这时maxCount ==左右两边的maxCount之和
在增加时,如果要加的区间正好覆盖一个节点,则增加其节点的Inc值,不再往下走,否则要更新nSum(加上本次增量),再将增量往下传。这样更新的复杂度就是O(log(n))在查询时,如果待查区间不是正好覆盖一个节点,就将节点的Inc往下带,然后将Inc代表的所有增量累加到nSum上后将Inc清0,接下来再往下查询。
1 /*************************************************************************
2 > File Name: poj3368rmq.cpp
3 > Author: YeGuoSheng
4 > Description:
5 > Created Time: 2019年07月11日 星期四 15时34分56秒
6 ************************************************************************/
7
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include