题目

题目描述
In one well-known algorithm of finding the kk -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 kk -element set S={a_{1},a_{2},…,a_{k}}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 xx by yy .

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

输入格式
The first line contains number nn ( 1<=n<=10^{5}1<=n<=10
5
), the number of operations performed.

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

add xx — add the element xx to the set;
del xx — delete the element xx from the set;
sum — find the sum of medians of the set.
For any add xx operation it is true that the element xx is not included in the set directly before the operation.

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

All the numbers in the input are positive integers, not exceeding 10^{9}10
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).

题意翻译
一个集合,初始为空。现有三个操作:
1.add:向集合里加入数x,保证加入前集合中没有数x;
2.del:从集合中删除数x,保证删除前集合中有x;
3.sum:询问将集合里的数从小到大排序后,求下标i模5余3的数的和。
现有n次操作,对于每个查询操作,输出答案
Translated by @maojinyang

输入输出样例
输入 #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

思路

首先建一棵权值线段树,然后每个节点维护几个东西

cnt,即这个节点所代表的值域区间里有多少个数
s[0…4],s[i]表示这个节点内的所有数排序后下标%5=i的数的和
上面两个东西随便算算就好了

代码

#include <bits/stdc++.h>using namespace std;typedef long long ll;
const int N = 1e5 + 10;struct node {int lc, rc;ll s[5]; int cnt;
} t[N * 40];
int rt = 0, siz = 0;void pushup(int x) {int lc = t[x].lc, rc = t[x].rc, ls = t[lc].cnt;for (int i = 0; i < 5; i++) t[x].s[i] = t[lc].s[i];for (int i = 0; i < 5; i++) t[x].s[(i + ls) % 5] += t[rc].s[i];t[x].cnt = t[lc].cnt + t[rc].cnt;
}void ins(int &x, int l, int r, int p, int v)
{if (!x) x = ++siz;if (l == r) {t[x].cnt += v;t[x].s[1] += 1ll * l * v;return;}int mid = (l + r) >> 1;if (p <= mid) ins(t[x].lc, l, mid, p, v);else ins(t[x].rc, mid + 1, r, p, v);pushup(x);
}int main() {char s[23];int _; for (scanf("%d", &_); _; _--) {scanf("%s", s);if (s[0] == 's') printf("%lld\n", t[rt].s[3]);else {int d = s[0] == 'd' ? -1 : 1, v;scanf("%d", &v);ins(rt, 1, 1e9, v, d);}}return 0;
}

【CF85D】 Sum of Medians相关推荐

  1. 「一题多解」【CodeForces 85D】Sum of Medians(线段树 / 分块)

    题目链接 [CodeForces 85D]Sum of Medians 题目大意 实现一个setsetset,支持插入,删除,求∑a5k+3∑a5k+3\sum a_{5k+3}.注意,setsets ...

  2. 【Codeforces1327A】: Sum of Odd Intergers C/C++题解

    Sum of Odd Intergers 题解 Codeforces[1327A]: Sum of Odd Intergers题解 一.题目描述 二.解题思路 三.注意事项 四.完整代码 五.另一种不 ...

  3. 【BZOJ4262】Sum 单调栈+线段树

    [BZOJ4262]Sum Description Input 第一行一个数 t,表示询问组数. 第一行一个数 t,表示询问组数. 接下来 t 行,每行四个数 l_1, r_1, l_2, r_2. ...

  4. 【LeetCode】Sum Root to Leaf Numbers

    题目 Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a num ...

  5. 【HDU4676】Sum Of Gcd(莫队+欧拉函数)

    点此看题面 大致题意: 多组询问,求\(\sum_{i=L}^R\sum_{j=i+1}^Rgcd(i,j)\). 推式子 这道题我们可以考虑,每个因数\(d\)被统计答案的次数,肯定与其出现次数有关 ...

  6. 【SQL】sum() overrow_number() over用法

    1.SUM(column) OVER(PARTITION BY column1 ORDER BY column2) SUM(column) OVER() :求和 SUM(column) OVER(PA ...

  7. poj 2411 Mondriaan#39;s Dream 【dp】

    题目:poj 2411 Mondriaan's Dream 题意:给出一个n*m的矩阵,让你用1*2的矩阵铺满,然后问你最多由多少种不同的方案. 分析:这是一个比較经典的题目.网上各种牛B写法一大堆. ...

  8. 【LeetCode】深搜DFS(共85题)

    [98]Validate Binary Search Tree [99]Recover Binary Search Tree [100]Same Tree [101]Symmetric Tree [1 ...

  9. Hrbust 2294 修建传送门【思维】

    修建传送门 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 56(14 users) Total Accepted: 12(10 use ...

最新文章

  1. Box2d 基础入门知识
  2. 使用registerForActivityResult替代onActivityResult
  3. springboot获取payload_Spring Boot 使用 JSR303 实现参数验证
  4. x86汇编-1(第三章—第四章)虚拟硬盘基本信息,虚拟硬盘的写入,bochs调试
  5. STM32F1笔记(三)UART/USART
  6. 从头到尾再讲一遍ThreadLocal
  7. Springboot启动报错:DEBUG org.springframework.boot.diagnostics.FailureAnalyzers
  8. 牛客多校第九场 ZOJ3774 The power of Fibonacci(二次剩余定理+斐波那契数列通项/循环节)题解...
  9. 什么是 Apache Shiro
  10. 斐波那契数列(C语言实现)
  11. SOC架构主要做什么?
  12. selenium操作360极速浏览器的方法
  13. 7.03maven和网络
  14. 辛苦编码好几年,一朝栽在算法前
  15. 在Android的 设置-显示 中增加控制屏幕旋转方向的选项
  16. java bigdecimal.round_down,java BigDecimal 的 setScale() 方法的 BigDecimal.ROUND_DOWN 舍入模式的BUG,坑...
  17. 原创西门子SMART 200 modbus rtu通讯宇电温控器例程
  18. 微信内测新功能(深度清理),瞬间释放几个G内存!
  19. Linux添加SSH Key到Github账户
  20. 基于java web的网上书店系统

热门文章

  1. IE6浏览器不支持固定定位(position:fixed)解决方案
  2. 【批处理DOS-CMD命令-汇总和小结】-上网和网络通信相关命令-用户账户管理-文件(夹)共享(net)
  3. 为图片添加斜体水印并保存水印图片
  4. 千年疑惑:为什么我越累越失眠,越睡越疲惫?
  5. C语言基础——执行顺序
  6. 数据结构与算法38-鸭棋
  7. win10 文件图标变白的解决方法
  8. hdu 1116 Play on Words
  9. 【笨方法学PAT】1116 Come on! Let's C (20 分)
  10. datetimepicker 插件用法及参数说明