题意:

n个操作

在[1, 100000]  的区间上add 或del数( 必不会重复添加或删除不存在的数)

sum 求出整个集合中 (下标%5 == 3 位置) 的数   的和

注意数据类型要64位

#include <stdio.h>
#include <string.h>
#include <queue>
#include <set>
#include <functional>
#include <map> #define N 101000
#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define Mid(x,y) ((x+y)>>1)
#define ll __int64
using namespace std;
inline ll Max(ll a, ll b){ return a>b?a:b;}
inline ll Min(ll a, ll b){ return a<b?a:b;} ll Point[N]; struct node{
int l,r;
ll sum[5];
int num;
}tree[N*4]; void build( int l, int r, int id){
tree[id].l = l, tree[id].r = r;
memset(tree[id].sum,0,sizeof(tree[id].sum));
tree[id].num = 0; if(l==r)return ;
int mid = Mid(l, r);
build(l, mid, L(id));
build(mid+1, r, R(id));
}
void Updata_up(int id){
tree[id].num = tree[L(id)].num + tree[R(id)].num ; for(int i=0;i<5;i++)
tree[id].sum[i] = tree[L(id)].sum[i]; for(int i=0;i<5;i++) tree[id].sum[ (tree[L(id)].num + i)%5 ] += tree[R(id)].sum[i]; }
void insert(int pos, int id, ll data, bool add){ // add = true 插入data =false 删除data
if(tree[id].l == tree[id].r){
if(add)
{ tree[id].num = 1; tree[id].sum[1] = data;}
else
{ tree[id].num = 0; tree[id].sum[1] = 0; } return ;
} int mid = Mid(tree[id].l, tree[id].r); if( pos <= mid) insert(pos, L(id), data, add);
else insert(pos, R(id), data, add); Updata_up(id);
} struct QUE{
char c;
ll u;
}que[N];
set<ll> tempset; map<ll, int> mymap; void Input(int n){
ll u; char s[5];
tempset.clear();
mymap.clear();
for(int i = 1; i <= n; i++){
scanf("%s", s);
que[i].c = s[0]; if(s[0]!='s')scanf("%I64d",&u), que[i].u = u, tempset.insert(u);
} set<ll> ::iterator p = tempset.begin();
int size = tempset.size();
for(int i = 1; i <= size ; i++,p++){
mymap.insert(pair<ll, int>(*p, i));
Point[i] = *p;
}
}
int go(ll x){
return mymap.find(x) -> second;
}
int main(){
int n;
while(~scanf("%d",&n)){
build(1,100000,1); Input(n); for(int i = 1; i<=n; i++){
ll u = que[i].u;
if(que[i].c == 'a')
insert(go(u),1,u,1); else if(que[i].c == 'd')
insert(go(u),1,u,0); else if(que[i].c == 's')
printf("%I64d\n", tree[1].sum[3]); }
}
return 0;
}
/*
9
add 1
add 2
add 3
add 4
add 5
sum
add 6
del 3
sum ans:
3
4 6
add 1
add 3
add 5
add 7
add 9
sum ans:
5 */

HDU 4288 线段树+离散化的更多相关文章

  1. ZOJ 2301/HDU 1199 线段树+离散化

    给这个题目跪了两天了,想吐简直 发现自己离散化没学好 包括前一个离散化的题目,实际上是错了,我看了sha崽的博客后才知道,POJ那题简直数据弱爆了,本来随便一组就能让我WA掉的,原因在于离散化的时候, ...

  2. hdu 4288 线段树 暴力 **

    题意: 维护一个有序数列{An},有三种操作: 1.添加一个元素. 2.删除一个元素. 3.求数列中下标%5 = 3的值的和. 解题思路: 看的各种题解,今天终于弄懂了. 由于线段树中不支持添加.删除 ...

  3. hdu 5792 线段树+离散化+思维

    题目大意: Given a sequence A with length n,count how many quadruple (a,b,c,d) satisfies: a≠b≠c≠d,1≤a< ...

  4. hdu 4288 线段树+离线+离散化

    http://acm.hdu.edu.cn/showproblem.php?pid=4288 開始的时候,果断TLE,做的方法是,线段树上只维护%5==3的坐标,比方1 2 3 4 5 6 7  假设 ...

  5. HDU 1542 线段树离散化+扫描线 平面面积计算

    也是很久之前的题目,一直没做 做完之后觉得基本的离散化和扫描线还是不难的,由于本题要离散x点的坐标,最后要计算被覆盖的x轴上的长度,所以不能用普通的建树法,建树建到r-l==1的时候就停止,表示某段而 ...

  6. hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)

    Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  7. hdu 1542 线段树扫描(面积)

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  8. HDU5124:lines(线段树+离散化)或(离散化思想)

    http://acm.hdu.edu.cn/showproblem.php?pid=5124 Problem Description John has several lines. The lines ...

  9. POJ 2528 Mayor's posters(线段树+离散化)

    Mayor's posters 转载自:http://blog.csdn.net/winddreams/article/details/38443761 [题目链接]Mayor's posters [ ...

随机推荐

  1. [C#学习]在多线程中如何调用Winform[转]

    问题的产生: 我的WinForm程序中有一个用于更新主窗口的工作线程(worker thread),但文档中却提示我不能在多线程中调用这个form(为什么?),而事实上我在调用时程序常常会崩掉.请问如 ...

  2. ListView item 中TextView 如何获取长按事件

    昨天晚上小伙伴突然来信, ListView item中嵌套的TextView 无法获取长按事件 从前从来没有仔细留意过, coding后发现...果然没什么动静 而且没有合适的API让我调用获取Tex ...

  3. hadoop namenode多次格式化后,导致datanode启动不了

    jps hadoop namenode -format dfs directory : /home/hadoop/dfs --data --current/VERSION #Wed Jul :: CS ...

  4. uboot环境变量区为何不能放在data段

    一.疑问 环境变量也是全局变量,为何不能像其他的全局变量放在data段呢?为什么要放在堆中或者使用ENV_IS_EMBEDDED定义的CFG_ENV_SIZE的空间大小,又为什么需要这么大的空间呢? ...

  5. uboot环境变量初始化

    一.环境变量概述 1.环境变量的概念 可以理解为用户对软件的全局配置信息,这部分信息应该可以从永久性存储器上读取,能被查询,能被修改. 启动过程中,应该首先把环境变量读取到合适的内存区域,然后利用环境 ...

  6. CAS单点登录(SSO)完整教程

    转:http://blog.csdn.net/frinder/article/details/7969925 CAS单点登录(SSO)完整教程(2012-02-01更新) 一.教程说明 前言 教程目的 ...

  7. JS获取终端屏幕、浏览窗口的相关信息

    查看终端屏幕相关信息,在windows系统的控制面板可以查到分辨率且可以设置,更具体的浏览器可视窗口等信息则需要借助其他工具.而在程序里需要动态获取时该怎么做呢? 琢磨的一个js方法,供大家参考.如下 ...

  8. spm使用之二兼谈spm的贱格

    上一篇还没写完, 因为我觉得太长了, 影响阅读, 就截断继续写. 因为还没有写到修改 创建模块的模板啊. 之所以想到要修改spm用来创建模块的模板, 是因为, 有一天我突然上不了网了, 发现spm完全 ...

  9. bootstrap的栅格布局不支持IE8该如何解决

    用bootstrap的栅格布局在IE8上出现失效的情况,通常有两种解决方式 方法/步骤   方法一:引用第三方js,一个叫respond.js的东西,github上可以搜到   方法二:由于IE8不支 ...

  10. Contest 20140923 登月计划 BabyStepGaintStep

    登月计划 查看 提交 统计 提问 总时间限制:  40000ms 内存限制:  256000kB 描述 HJA在和学弟学数学,于是便有了一道非常简单的数学题:求满足 的最小自然数x. 输入 输入数据一 ...