CF85D.Sum of Medians

提高+/省选-

通过率:0%

时间限制:3.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

In one well-known algorithm of finding the k-th order statistics we should divide all elements into groups of five consecutive elements and find the median of each five. A median is called the middle element of a sorted array (it's the third largest element for a group of five). To increase the algorithm's performance speed on a modern video card, you should be able to find a sum of medians in each five of the array.

A sum of medians of a sorted k-element set S = {_a_1, _a_2, ..., a__k}, where _a_1 < _a_2 < _a_3 < ... < a__k, will be understood by as

The operator stands for taking the remainder, that is stands for the remainder of dividing x by y.

To organize exercise testing quickly calculating the sum of medians for a changing set was needed.

在一种著名的求第 kk 小元素(即第 kk 个顺序统计量)的算法中,我们需要将所有元素划分为若干组,每组包含五个连续元素,并求出每组的中位数。此处中位数定义为该组排序后数组的中间元素(对五个元素组成的组而言,即第三大的元素)。为了提升该算法在现代显卡上的运行性能,你需要能够快速计算数组中每个五元组的中位数之和。

对于一个已排序的 kk 元集合 S={a1,a2,…,ak}S = \{a_1, a_2, \dots, a_k\}(其中 a1<a2<a3<⋯<aka_1 < a_2 < a_3 < \dots < a_k),其中位数之和定义为:

其中符号 表示取余运算,即 表示 xx 除以 yy 所得的余数。

为高效地组织练习测试,需要能快速计算一个动态变化集合的中位数之和。

输入格式

The first line contains number n (1 ≤ n ≤ 105), the number of operations performed.

Then each of n lines contains the description of one of the three operations:

  • add x — add the element x to the set;
  • del x — delete the element x from the set;
  • sum — find the sum of medians of the set.

For any add x operation it is true that the element x is not included in the set directly before the operation.

For any del x operation it is true that the element x is included in the set directly before the operation.

All the numbers in the input are positive integers, not exceeding 109.

第一行包含一个整数 nn(1≤n≤1051 \leq n \leq 10^5),表示执行的操作次数。

接下来的 nn 行,每行描述以下三种操作之一:

  • add x — 将元素 xx 加入集合;
  • del x — 从集合中删除元素 xx;
  • sum — 计算集合所有中位数的总和。

对于任意 add x 操作,保证在该操作执行前,元素 xx 不在集合中。

对于任意 del x 操作,保证在该操作执行前,元素 xx 已在集合中。

输入中的所有数字均为正整数,且不超过 10910^9。

输出格式

For each operation sum print on the single line the sum of medians of the current set. If the set is empty, print 0.

Please, do not use the %lld specificator to read or write 64-bit integers in C++. It is preferred to use the cin, cout streams (also you may use the %I64d specificator).

对于每个 sum 操作,请在单独一行输出当前集合中所有中位数的和。如果集合为空,则输出 0。

请注意,在 C++ 中请勿使用 %lld 格式说明符来读取或写入 64 位整数。推荐使用 cin 和 cout 流(您也可以使用 %I64d 格式说明符)。

输入输出样例

  • 输入#1

    6
    add 4
    add 5
    add 1
    add 2
    add 3
    sum

    输出#1

    3
  • 输入#2

    14
    add 1
    add 7
    add 2
    add 5
    sum
    add 6
    add 8
    add 9
    add 3
    add 4
    add 10
    sum
    del 1
    sum

    输出#2

    5
    11
    13

输入解题思路,AI测评打分。不知道怎么写?

首页