题目传送门

题意:集合,add x, del x, 求和

分析:首先,暴力可以过这题。用上线段树能大大降低时间的消耗,具体就是类似开了5棵线段树,每个节点都有5个空间,表示该区间的id%5后的和,区间合并右边的id‘ = i + leftnum,子节点要存到sum[o][1]表示%5=1。还需要对数据离线离散化。

//#include <bits/stdc++.h>
#include <cstdio>
#include <algorithm>
#include <cstring> #define lson l, mid, o << 1
#define rson mid + 1, r, o << 1 | 1
typedef long long ll;
const int N = 1e5 + 5;
ll sum[N<<2][5];
int cnt[N<<2];
int x[N], X[N];
char str[N][3]; void push_up(int o) {
cnt[o] = cnt[o<<1] + cnt[o<<1|1];
int lnum = cnt[o<<1];
for (int i=0; i<5; ++i) {
sum[o][i] = sum[o<<1][i];
}
for (int i=0; i<5; ++i) {
sum[o][(i+lnum)%5] += sum[o<<1|1][i];
}
}
void updata(int p, int op, int l, int r, int o) {
if (l == r) {
cnt[o] = op;
sum[o][1] = op * X[l-1];
return ;
}
int mid = l + r >> 1;
if (p <= mid) {
updata (p, op, lson);
} else {
updata (p, op, rson);
}
push_up (o);
} int main() {
int n, m;
char str[N][3];
while (scanf ("%d", &n) == 1) {
m = 0;
for (int i=0; i<n; ++i) {
scanf ("%s", str[i]);
if (str[i][0] != 's') {
scanf ("%d", &x[i]);
X[m++] = x[i];
}
}
std::sort (X, X+m);
m = std::unique (X, X+m) - X;
memset (sum, 0, sizeof (sum));
memset (cnt, 0, sizeof (cnt));
for (int i=0; i<n; ++i) {
int pos = std::upper_bound (X, X+m, x[i]) - X;
if (str[i][0] == 'a') {
updata (pos, 1, 1, m, 1);
} else if (str[i][0] == 'd') {
updata (pos, 0, 1, m, 1);
} else {
printf ("%I64d\n", sum[1][3]);
}
}
} return 0;
}

  

线段树(多棵) HDOJ 4288 Coder的更多相关文章

  1. 线段树(单点更新) HDOJ 4288 Coder

    题目传送门 #include <cstdio> #include <cstring> #define lson l, m, rt << 1 #define rson ...

  2. 线段树(单点更新) HDOJ 2795 Billboard

    题目传送门 /* 主要利用线段树求区间最值,sum[]代表位置可用空间 每次找到最大值的位置 功能:查询最靠前能容纳广告的位置 */ #include <cstdio> #include ...

  3. 线段树(区间合并) HDOJ 3308 LCIS

    题目传送门 题意:线段树操作:1. 单点更新 2. 求区间的LCIS(longest consecutive increasing subsequence) 分析:注意是连续的子序列,就是简单的区间合 ...

  4. 二分+树状数组/线段树(区间更新) HDOJ 4339 Query

    题目传送门 题意:给两串字符串,操作1:替换其中一个字符串的某个位置的字符 操作2:查询从p开始相等的最长连续长度 分析:树状数组可以维护一个区间内公共长度(连续)的情况,查询时用二分查找最远的端点即 ...

  5. CodeForces 587 E.Duff as a Queen 线段树动态维护区间线性基

    https://codeforces.com/contest/587/problem/E 一个序列, 1区间异或操作 2查询区间子集异或种类数 题解 解题思路大同小异,都是利用异或的性质进行转化,st ...

  6. POJ 2104 K-th Number && 洛谷 P3834 【模板】可持久化线段树 1(主席树)

    我惊奇的发现这两道题一模一样 题目背景 这是个非常经典的主席树入门题——静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个整数构成的序列,将对于指定的闭区间查询 ...

  7. HDU 1166 线段树模板&树状数组模板

    HDU1166 上好的线段树模板&&树状数组模板 自己写的第一棵线段树&第一棵树状数组 莫名的兴奋 线段树: #include <cstdio> using nam ...

  8. HDU 4288 Coder (线段树)

    Coder 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4288 题意:有三种类型的操作,(1)."add x",表示往集合里加入�数 ...

  9. HDU 4288 Coder 【线段树+离线处理+离散化】

    题意略. 离线处理,离散化.然后就是简单的线段树了.需要根据mod 5的值来维护.具体看代码了. /* 线段树+离散化+离线处理 */ #include <cstdio> #include ...

随机推荐

  1. August 8th 2016, Week 33rd Monday

    Everything is going on, but don't give up trying. 万事随缘,但不要放弃努力. Every time when I want to give up, y ...

  2. 解决客户端访问https报错

    现象: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure at com.sun.net.ssl. ...

  3. C#冒泡排序

    C#最简单的冒泡排序,需要的朋友可作参考: 思路: 使用两个for循环,就可以遍历数组,这样就可以确保每个数组元素都被使用 对比前后两个数,将小的数字和大的交换位置,引入一个临时变量temp来进行交换 ...

  4. htop 源码安装

    htop-1.0.2.tar.gz  http://pan.baidu.com/s/1c1RbdIg tar -xvf htop-1.0.2.tar.gz cd htop-1.0.2 ./config ...

  5. ASP.NET MVC Json()处理大数据异常解决方法,字符串的长度超过了为 maxJsonLength

    问题: 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错.字符串的长度超过了为 maxJsonLength 属性设置的值. <system.web.exten ...

  6. jQuery - 9.Ajax

    9.1 Ajax 的 XMLHttpRequest 对象 9.2 JQuery中的Ajax 9.2.1 load()方法 9.2.2 $.get() 9.2.3 $.post() 9.2.4 $.ge ...

  7. weblogic监控

    http://wenku.baidu.com/link?url=tQPQ-dgm7NOkEGj_vemwtsPd6TJ6W3x6_0UBLgw61N982SwPlz-QFxqncsmPGqHwJAEF ...

  8. Delphi线程同步(临界区、互斥、信号量)

    当有多个线程的时候,经常需要去同步这些线程以访问同一个数据或资源. 例如,假设有一个程序,其中一个线程用于把文件读到内存,而另一个线程用于统计文件的字符数.当然,在整个文件调入内存之前,统计它的计数是 ...

  9. Delphi中线程类TThread实现多线程编程2---事件、临界区、Synchronize、WaitFor……

    接着上文介绍TThread. 现在开始说明 Synchronize和WaitFor 但是在介绍这两个函数之前,需要先介绍另外两个线程同步技术:事件和临界区 事件(Event) 事件(Event)与De ...

  10. 【翻译九】java-同步方法

    Synchronized Methods The Java programming language provides two basic synchronization idioms: synchr ...