首页 > 试题广场 >

小A的排列

[编程题]小A的排列
小A有一个长度为n的排列p_i
小A想要知道这个排列中,所有区间的中位数。
不过最近小A沉迷巫师3,到处打牌无法自拔,所以他找到了你,希望你能够解决这个问题。
设区间l,r的中位数为
为了方便,只需要你输出
答案对取模。
中位数的定义:
对于一个不重集合,将这个集合里的数从小到大排序为a_1,a_2,a_3,....,a_m
当m是奇数,S的中位数为
当m是偶数,S的中位数为

输入描述:
第一行两个正整数n,seed ,含义如题目所示
第二行一个排列p


输出描述:
一个正整数ans。
示例1

输入

4 1
1 2 3 4

输出

50
头像 Muscari
发表于 2020-10-04 17:27:25
一个暴力是枚举左右端点,用 set 求中位数,然而是 的。 但是我们注意到,在加入一个数后,中位数至多只会移动 个位置,即不变或者变成前驱或后继。 于是我们需要支持一个 插入、 求前驱后继的数据结构,发现并找不到。 但是我们可以倒过来变成删除,这样子就可以用链表维护了。 // ======== 展开全文