线段树(多棵) HDOJ 4288 Coder
题意:集合,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的更多相关文章
- 线段树(单点更新) HDOJ 4288 Coder
题目传送门 #include <cstdio> #include <cstring> #define lson l, m, rt << 1 #define rson ...
- 线段树(单点更新) HDOJ 2795 Billboard
题目传送门 /* 主要利用线段树求区间最值,sum[]代表位置可用空间 每次找到最大值的位置 功能:查询最靠前能容纳广告的位置 */ #include <cstdio> #include ...
- 线段树(区间合并) HDOJ 3308 LCIS
题目传送门 题意:线段树操作:1. 单点更新 2. 求区间的LCIS(longest consecutive increasing subsequence) 分析:注意是连续的子序列,就是简单的区间合 ...
- 二分+树状数组/线段树(区间更新) HDOJ 4339 Query
题目传送门 题意:给两串字符串,操作1:替换其中一个字符串的某个位置的字符 操作2:查询从p开始相等的最长连续长度 分析:树状数组可以维护一个区间内公共长度(连续)的情况,查询时用二分查找最远的端点即 ...
- CodeForces 587 E.Duff as a Queen 线段树动态维护区间线性基
https://codeforces.com/contest/587/problem/E 一个序列, 1区间异或操作 2查询区间子集异或种类数 题解 解题思路大同小异,都是利用异或的性质进行转化,st ...
- POJ 2104 K-th Number && 洛谷 P3834 【模板】可持久化线段树 1(主席树)
我惊奇的发现这两道题一模一样 题目背景 这是个非常经典的主席树入门题——静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个整数构成的序列,将对于指定的闭区间查询 ...
- HDU 1166 线段树模板&树状数组模板
HDU1166 上好的线段树模板&&树状数组模板 自己写的第一棵线段树&第一棵树状数组 莫名的兴奋 线段树: #include <cstdio> using nam ...
- HDU 4288 Coder (线段树)
Coder 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4288 题意:有三种类型的操作,(1)."add x",表示往集合里加入�数 ...
- HDU 4288 Coder 【线段树+离线处理+离散化】
题意略. 离线处理,离散化.然后就是简单的线段树了.需要根据mod 5的值来维护.具体看代码了. /* 线段树+离散化+离线处理 */ #include <cstdio> #include ...
随机推荐
- IOS-MVC的使用
1.Model不允许和Controller,View打交道.也就是Model根本不知道谁会用自己,Model中不能有任何对 Controller和View的引用.正所谓:Don't call me, ...
- SSH框架中json传递失败
错误截图: 这个错误乍一看无从下手,报的都是框架底层的错误,于是查阅资料得到了答案. 错误原因:struts会将action中定义的一些变量序列化转换成json格式,需要调用对象的一系列get方法,并 ...
- Struts2之类型转换器
一.类型转换器的应用场景 类型转换是OGNL的一部分,默认的八种基本类型.String.Date会使用类型转换,但是更复杂的类型转换就需要我们自定义了(虽然这个东西一般根本用不到),OGNL可以应用在 ...
- NYOJ之茵茵的第一课
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtQAAAJ/CAIAAADXlNOKAAAgAElEQVR4nO3dsVLjOsMG4P8m6LkQ2u
- js获取缓存数据
后台:request.setAttribute("type", type); 前台js获取:var type = "${type}";
- sql server 常用脚本(日常查询所需)
1:查看sql server代理中作业的运行状况的脚本 -- descr : a simple sql script to view sql server jobs run status -- las ...
- Oracle如何写出高效的SQL
转载:http://www.blogjava.net/ashutc/archive/2009/07/19/277215.html 1.选择最有效率的表明顺序(只在基于规则的优化器中有效) Oracle ...
- Codeforces Round #363 Fix a Tree(树 拓扑排序)
先做拓扑排序,再bfs处理 #include<cstdio> #include<iostream> #include<cstdlib> #include<cs ...
- ZooKeeper 的羊群效应
一个需要避免的问题是当一个特定的znode 改变的时候ZooKeper 触发了所有watches 的事件. 举个例子,如果有1000个客户端watch 一个znode的exists调用,当这个节点被创 ...
- js判断手机端Android手机还是iPhone手机
/*判断当前设备是平板.安卓.苹果设备*/ <script type="text/javascript"> function fBrowserRedirect(){ v ...