题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4288

题目大意:

维护一个有序数列{An},有三种操作:

1、添加一个元素。

2、删除一个元素。

3、求数列中下标%5 = 3的值的和

解题思路:

线段树不支持动态的添加,删除操作,所以本题用了离线处理,将所有数字事先离散化,给每个数字存一个位子,然后处理。

先离线把要用到的数离散化,去重并且排序,这样做添加或删除操作的时候就可以用二分找出下表并在线段树内修改,由于是单点更新,就不用”向下传递“了。

其实操作和单点更新一样,只是要用一个数组sum[5]记录对应区间内mod5的5种情况的和。所以当添加或删除一个数时都是在sum[1]这里增删,可以想想区间[2,2]是不是只有一个数,那么这个数的下标是1,mod5=1,所以在sum[1]处处理,更新父节点的时候要注意,父亲的左区间的下标与左儿子的下标mod5的情况完全相同,而父亲的右区间和右儿子的下标在左儿子的个数前提上mod5,所以cnt代表区间内有效数的个数。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MID(l, r) (l + (r - l) / 2)
#define lson(o) (o * 2)
#define rson(o) (o * 2 + 1)
using namespace std;
typedef long long ll;
const int INF = 1e9 +;
const int maxn = 1e6 + ;
int h, w, n;
struct node
{
int l, r, tot;//tot表示节点个数
ll sum[];
}tree[maxn];
void build(int o, int l, int r)
{
tree[o].l = l, tree[o].r = r;
tree[o].tot = ;
memset(tree[o].sum, , sizeof(tree[o].sum));
if(l == r)
{
return;
}
int m = MID(l ,r), lc = lson(o), rc = rson(o);
build(lc, l, m);
build(rc, m + , r);
}
//a[p] += v * x
//v表示符号,为1表示add 为-1表示del
int p, v, x;
void update(int o)
{
if(tree[o].l == tree[o].r)
{
tree[o].sum[] += v * x;
tree[o].tot += v;
return ;
}
int lc = lson(o), rc = rson(o);
if(p <= tree[lc].r)update(lc);
else update(rc);
for(int i = ; i < ; i++)
tree[o].sum[i] = tree[lc].sum[i] + tree[rc].sum[((i - tree[lc].tot) % + ) % ];
tree[o].tot = tree[lc].tot + tree[rc].tot;
} int a[maxn], b[maxn], c[maxn];
int main()
{
while(scanf("%d", &n) != EOF)
{
char s[];
int tot = ;
for(int i = ; i < n; i++)
{
scanf("%s", s);
if(s[] == 's')
a[i] = ;
else
{
scanf("%d", &b[++tot]);
if(s[] == 'a')
a[i] = ;
else a[i] = ;
}
}
memcpy(c, b, sizeof(c));
sort(b + , b + tot + );
tot = unique(b + , b + tot + ) - (b + );
build(, , tot);
for(int i = , j = ; i < n; i++)
{
if(a[i] == )
{
printf("%lld\n", tree[].sum[]);
}
else
{
if(a[i] == )v = ;
else v = -;
p = lower_bound(b + , b + + tot, c[++j]) - b;
x = b[p];
update();
}
}
}
return ;
}

hdu-4288 Coder---线段树+离线处理&离散化的更多相关文章

  1. hdu 4288 Coder (线段树+离线)

    题意: 刚开始有一个空集合.有三种操作: 1.往集合中加入一个集合中不存在的数 x 2.从集合中删除一个已经存在的数 x 3.计算集合的digest sum并输出.       digest sum求 ...

  2. HDU 4288 Coder(线段树)

    题意: 给定三种操作 1. add x 向序列中添加x,添加之后序列还保持有序 2. del x  删除序列中值为x的元素 3. sum  求下边模5等于3的元素和 思路: 直接暴力也可以过,就是看暴 ...

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

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

  4. HDU 4638-Group(线段树+离线处理)

    题意: 给n个编号,m个查询每个查询l,r,求下标区间[l,r]中能分成标号连续的组数(一组内的标号是连续的) 分析: 我们认为初始,每个标号为一个组(线段树维护区间组数),从左向右扫序列,当前标号, ...

  5. HDU 4417 【线段树+离线处理】

    http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意:找出给定区间内,有多少个数小于等于给定的数.用线段树维护的话会超时,要用到线段树的离线操作,对询问与 ...

  6. HDU 3333 & 3874 (线段树+离线询问)

    两个题目都是求区间之内,不重复的数字之和,3333需要离散化处理................. 调试了一下午........说多了都是泪........... #include <iostr ...

  7. HDU - 3874 Necklace (线段树 + 离线处理)

    欢迎參加--每周六晚的BestCoder(有米! ) Necklace Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 65536/3 ...

  8. Necklace HDU - 3874 (线段树/树状数组 + 离线处理)

    Necklace HDU - 3874  Mery has a beautiful necklace. The necklace is made up of N magic balls. Each b ...

  9. POJ-2528 Mayor's posters (线段树区间更新+离散化)

    题目分析:线段树区间更新+离散化 代码如下: # include<iostream> # include<cstdio> # include<queue> # in ...

  10. hdu 4031 attack 线段树区间更新

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total Subm ...

随机推荐

  1. Mercurial stuck “waiting for lock”, tortoisehg pull版本卡住在等待 解决办法

    最近使用hg的时候,拖取版本一直卡住不动.报错类似waiting for lock on working directory of xxxx held by ''. 原本以为是网络不好或者hg安装有问 ...

  2. TT 安装 之 AIX

    # mkgroup -'A' id='1000' adms='root' tt -- 创建用户 # mkuser id='1000' pgrp='tt' groups='tt' adms='root' ...

  3. Unity 代码控制游戏对象是父物体的第多少个子对象

    一个canvas下的游戏对象,排列顺序越往下,渲染顺序就越靠后,就会覆盖在先前的图形上.也就是说,运行游戏后,物体的渲染顺序是一个一个计算的. Transform.SetSiblingIndex(in ...

  4. Flask中的的SQLAlchemy2

    昨天更新了博客不知对各位职场的大佬有没有帮助,如果没有看到的请用小手狠狠地戳这里 Flask中的的SQLAlchemy 今天呢,我们来说一下多对多表的关系,知道不?开始之前我先说一个事,昨晚更新了博客 ...

  5. C++ 17的新标准

    几个自己比较关注的C++新标准,说是17的标准,不过估计要拖到20才能真正支持   Module python的import之类的东西   解决问题: include头文件导致速度变慢的问题   目前 ...

  6. TOJ 1856 Is It A Tree?

    Description A tree is a well-known data structure that is either empty (null, void, nothing) or is a ...

  7. Coursera 机器学习 第9章(上) Anomaly Detection 学习笔记

    9 Anomaly Detection9.1 Density Estimation9.1.1 Problem Motivation异常检测(Density Estimation)是机器学习常见的应用, ...

  8. 白话SpringCloud | 第九章:路由网关(Zuul)的使用

    前言 介绍完分布式配置中心,结合前面的文章.我们已经有了一个微服务的框架了,可以对外提供api接口服务了.但现在试想一下,在微服务框架中,每个对外服务都是独立部署的,对外的api或者服务地址都不是不尽 ...

  9. Hashtable元素的删除

    2中方法 Remove(); Clear(); static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add(1,& ...

  10. Path类 操作文件类

    // Path类 IO命名空间 静态类 不能创建对象类名. string str =@"E:\C#程序设计基础入门教程\(第十一天)\122\22\nee.txt"; ////in ...