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 [ ...
随机推荐
- jquery自动切换tabs选项卡
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncodi ...
- 不错的轮播插件flexslider
http://flexslider.woothemes.com/ $('.flexslider').flexslider({ animation:'slide', //滑动效果:翻页效果,默认为fad ...
- [BZOJ 3282] Tree 【LCT】
题目链接:BZOJ - 3282 题目分析 这道题是裸的LCT,包含 Link , Cut 和询问两点之间的路径信息. 写代码时出现的错误:Access(x) 的循环中应该切断的是原来的 Son[x] ...
- 解决Tomcat无法加载css和js等静态资源文件
解决思路有两个 一是,你使用了Apache服务器,html不交给Tomcat处理,所以你找不到Html等静态资源,所以你先停掉阿帕奇,然后只用Tomcat猫试试. 二是,像我一样,使用了Jetty开发 ...
- 【Tools】Apache Maven 入门篇 ( 上 )
作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法.这个入门篇分上下两篇.本文着重动手,用 mave ...
- Park Visit
hdu4607:http://acm.hdu.edu.cn/showproblem.php?pid=4607 题意:给你一棵树,树上每条边的权值是1,然后然你选择m个点,求遍历m个点的最小花费. 题解 ...
- LINUX TOP,不是这样玩地!!!
老同志遇到新问题了. TOP显示完全不是我要的,CPU,内存都是0.每个CPU还分别显示. 网上搜下,原来是A(显示风格)R(反向排序)P,M(CPU,内存排序)之类引起的. 记下了.
- 【UVA1379】Pitcher Rotation (贪心+DP)
题意: 你经营者一直棒球队.在接下来的g+10天中有g(3<=g<=200)场比赛,其中每天最多一场比赛.你已经分析出你的n(5<=n<=100)个投手中每个人对阵所有m个对手 ...
- YII model模型和登陆详解
模型是 CModel 或其子类的实例.模型用于保持数据以及与其相关的业务逻辑. 模型是单独的数据对象.它可以是数据表中的一行,或者一个用户输入的表单. 数据对象的每个字段对应模型中的一个属性.每个属性 ...
- UVA 586 Instant Complexity
给出一段程序,求运行时间. 现在只考虑一层LOOP,不妨用数组a[i]来表示n的i次方的系数.如果输入OP m,那么就在a[0]上加m,遇到END,就说明循环结束了,需要在系数上乘以循环次数.如果次数 ...