HDU 4288 线段树+离散化
题意:
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 线段树+离散化的更多相关文章
- ZOJ 2301/HDU 1199 线段树+离散化
给这个题目跪了两天了,想吐简直 发现自己离散化没学好 包括前一个离散化的题目,实际上是错了,我看了sha崽的博客后才知道,POJ那题简直数据弱爆了,本来随便一组就能让我WA掉的,原因在于离散化的时候, ...
- hdu 4288 线段树 暴力 **
题意: 维护一个有序数列{An},有三种操作: 1.添加一个元素. 2.删除一个元素. 3.求数列中下标%5 = 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< ...
- hdu 4288 线段树+离线+离散化
http://acm.hdu.edu.cn/showproblem.php?pid=4288 開始的时候,果断TLE,做的方法是,线段树上只维护%5==3的坐标,比方1 2 3 4 5 6 7 假设 ...
- HDU 1542 线段树离散化+扫描线 平面面积计算
也是很久之前的题目,一直没做 做完之后觉得基本的离散化和扫描线还是不难的,由于本题要离散x点的坐标,最后要计算被覆盖的x轴上的长度,所以不能用普通的建树法,建树建到r-l==1的时候就停止,表示某段而 ...
- 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 ...
- hdu 1542 线段树扫描(面积)
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- HDU5124:lines(线段树+离散化)或(离散化思想)
http://acm.hdu.edu.cn/showproblem.php?pid=5124 Problem Description John has several lines. The lines ...
- POJ 2528 Mayor's posters(线段树+离散化)
Mayor's posters 转载自:http://blog.csdn.net/winddreams/article/details/38443761 [题目链接]Mayor's posters [ ...
随机推荐
- jcarousellite 实现图片列表滚动
jcarousel Lite与jcarousel 相比去掉了皮肤的约束,可以自定义的设置前后按钮和选项卡按钮,生成的html更加简洁,文件更小(2k) 下载链接:http://www.gmarwaha ...
- oracle删除用户所有表
在删除数据表的时候往往遇到外键约束无法删除的情况,我们可以通过以下几步将数据库表删除,建议在删除库之前先对数据库进行备份,养成良好习惯. 1.删除外键 --查询用户所有表的外键,owner条件为use ...
- Javascript线程及定时机制
setTimeout.setInterval的使用 Javascript api文档中定义setTimeout和setInterval第二个参数意义分别为间隔多少毫秒后回调函数被执行和每隔多少毫秒回调 ...
- 大数据技术人年度盛事! BDTC 2016将于12月8-10日在京举行
2016年12月8日-10日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中国科学院计算技术研究所和CSDN共同协办的2016中国大数据技术大会(Big Data Technology ...
- C# 仿迅雷风格选项卡
private void listView1_SelectedIndexChanged(object sender, EventArgs e) { listView1.FullRowSelect = ...
- 2016030102 - Ubuntu软件安装与删除相关命令
apt-get, dkpg 常用命令: 安装软件命令: apt-get install softname1 softname2 softname3…… 卸载软件命令: apt-get remove s ...
- FutureTask源码解读
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.ut ...
- 如何与 DevOps 为伍?
DevOps 是一个席卷 IT 界的新术语.但它究竟是什么,南非的公司们如何利用它来加快高品质应用程序的开发速度?国外知名博客作者凯西·吉布森找到了一些答案. 其实 DevOps 这个词已经火了一段时 ...
- iOS9 App Thinning(应用瘦身)功能介绍
iOS9 发布后,产生了一个使 App Thinning 无法正常运行的 bug.在iOS9.0.2 版本中,这个 bug 已经被修复,App Thinning 已经可以正常使用.当你从应用商店(Ap ...
- 在linux中使用php将word文档转为pdf
使用本教程需要在linux中安装openoffice,改页面中有详细的安装与使用教程(http://www.cnblogs.com/sustudy/p/3999628.html). 既然,你看了该教程 ...