前置知识:树状数组
树状数组是一种类似于线段树的数据结构,用于区间查询和区间更新。
其结构如下图:
该结构的创建复杂度为O(n),单次查询和修改的复杂度都是O(logn)。
更详细的讲解可以参见博客树状数组详解
思路
-
读入数据同时记录result为1的总数total。时间复杂度O(n)。
-
排序:先将原数据,按照y为主关键字降序,result为次关键字降序。时间复杂度O(nlogn)。
-
创建树状数组,时间复杂度O(n)。
-
循环i:1->n,对于i查询i及其之前的result为1的总和sum(i),以及i 之后的0的总数n-i-(total-sum(I)),这两个的总和即为准确的次数num,在循环过程中记录num的最大值,及对应的最大y。该项时间复杂度为O(nlogn)。
综上,该算法总时间复杂度为O(nlogn)