题意:

n个操作

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

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

注意数据类型要64位

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <queue>
  4. #include <set>
  5. #include <functional>
  6. #include <map>
  7.  
  8. #define N 101000
  9. #define L(x) (x<<1)
  10. #define R(x) (x<<1|1)
  11. #define Mid(x,y) ((x+y)>>1)
  12. #define ll __int64
  13. using namespace std;
  14. inline ll Max(ll a, ll b){ return a>b?a:b;}
  15. inline ll Min(ll a, ll b){ return a<b?a:b;}
  16.  
  17. ll Point[N];
  18.  
  19. struct node{
  20. int l,r;
  21. ll sum[5];
  22. int num;
  23. }tree[N*4];
  24.  
  25. void build( int l, int r, int id){
  26. tree[id].l = l, tree[id].r = r;
  27. memset(tree[id].sum,0,sizeof(tree[id].sum));
  28. tree[id].num = 0;
  29.  
  30. if(l==r)return ;
  31. int mid = Mid(l, r);
  32. build(l, mid, L(id));
  33. build(mid+1, r, R(id));
  34. }
  35. void Updata_up(int id){
  36. tree[id].num = tree[L(id)].num + tree[R(id)].num ;
  37.  
  38. for(int i=0;i<5;i++)
  39. tree[id].sum[i] = tree[L(id)].sum[i];
  40.  
  41. for(int i=0;i<5;i++) tree[id].sum[ (tree[L(id)].num + i)%5 ] += tree[R(id)].sum[i];
  42.  
  43. }
  44. void insert(int pos, int id, ll data, bool add){ // add = true 插入data =false 删除data
  45. if(tree[id].l == tree[id].r){
  46. if(add)
  47. { tree[id].num = 1; tree[id].sum[1] = data;}
  48. else
  49. { tree[id].num = 0; tree[id].sum[1] = 0; }
  50.  
  51. return ;
  52. }
  53.  
  54. int mid = Mid(tree[id].l, tree[id].r);
  55.  
  56. if( pos <= mid) insert(pos, L(id), data, add);
  57. else insert(pos, R(id), data, add);
  58.  
  59. Updata_up(id);
  60. }
  61.  
  62. struct QUE{
  63. char c;
  64. ll u;
  65. }que[N];
  66. set<ll> tempset;
  67.  
  68. map<ll, int> mymap;
  69.  
  70. void Input(int n){
  71. ll u; char s[5];
  72. tempset.clear();
  73. mymap.clear();
  74. for(int i = 1; i <= n; i++){
  75. scanf("%s", s);
  76. que[i].c = s[0];
  77.  
  78. if(s[0]!='s')scanf("%I64d",&u), que[i].u = u, tempset.insert(u);
  79. }
  80.  
  81. set<ll> ::iterator p = tempset.begin();
  82. int size = tempset.size();
  83. for(int i = 1; i <= size ; i++,p++){
  84. mymap.insert(pair<ll, int>(*p, i));
  85. Point[i] = *p;
  86. }
  87. }
  88. int go(ll x){
  89. return mymap.find(x) -> second;
  90. }
  91. int main(){
  92. int n;
  93. while(~scanf("%d",&n)){
  94. build(1,100000,1);
  95.  
  96. Input(n);
  97.  
  98. for(int i = 1; i<=n; i++){
  99. ll u = que[i].u;
  100. if(que[i].c == 'a')
  101. insert(go(u),1,u,1);
  102.  
  103. else if(que[i].c == 'd')
  104. insert(go(u),1,u,0);
  105.  
  106. else if(que[i].c == 's')
  107. printf("%I64d\n", tree[1].sum[3]);
  108.  
  109. }
  110. }
  111. return 0;
  112. }
  113. /*
  114. 9
  115. add 1
  116. add 2
  117. add 3
  118. add 4
  119. add 5
  120. sum
  121. add 6
  122. del 3
  123. sum
  124.  
  125. ans:
  126. 3
  127. 4
  128.  
  129. 6
  130. add 1
  131. add 3
  132. add 5
  133. add 7
  134. add 9
  135. sum
  136.  
  137. ans:
  138. 5
  139.  
  140. */

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. jquery自动切换tabs选项卡

    <%@ page language="java" contentType="text/html; charset=utf-8"    pageEncodi ...

  2. 不错的轮播插件flexslider

    http://flexslider.woothemes.com/ $('.flexslider').flexslider({ animation:'slide', //滑动效果:翻页效果,默认为fad ...

  3. [BZOJ 3282] Tree 【LCT】

    题目链接:BZOJ - 3282 题目分析 这道题是裸的LCT,包含 Link , Cut 和询问两点之间的路径信息. 写代码时出现的错误:Access(x) 的循环中应该切断的是原来的 Son[x] ...

  4. 解决Tomcat无法加载css和js等静态资源文件

    解决思路有两个 一是,你使用了Apache服务器,html不交给Tomcat处理,所以你找不到Html等静态资源,所以你先停掉阿帕奇,然后只用Tomcat猫试试. 二是,像我一样,使用了Jetty开发 ...

  5. 【Tools】Apache Maven 入门篇 ( 上 )

    作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法.这个入门篇分上下两篇.本文着重动手,用 mave ...

  6. Park Visit

    hdu4607:http://acm.hdu.edu.cn/showproblem.php?pid=4607 题意:给你一棵树,树上每条边的权值是1,然后然你选择m个点,求遍历m个点的最小花费. 题解 ...

  7. LINUX TOP,不是这样玩地!!!

    老同志遇到新问题了. TOP显示完全不是我要的,CPU,内存都是0.每个CPU还分别显示. 网上搜下,原来是A(显示风格)R(反向排序)P,M(CPU,内存排序)之类引起的. 记下了.

  8. 【UVA1379】Pitcher Rotation (贪心+DP)

    题意: 你经营者一直棒球队.在接下来的g+10天中有g(3<=g<=200)场比赛,其中每天最多一场比赛.你已经分析出你的n(5<=n<=100)个投手中每个人对阵所有m个对手 ...

  9. YII model模型和登陆详解

    模型是 CModel 或其子类的实例.模型用于保持数据以及与其相关的业务逻辑. 模型是单独的数据对象.它可以是数据表中的一行,或者一个用户输入的表单. 数据对象的每个字段对应模型中的一个属性.每个属性 ...

  10. UVA 586 Instant Complexity

    给出一段程序,求运行时间. 现在只考虑一层LOOP,不妨用数组a[i]来表示n的i次方的系数.如果输入OP m,那么就在a[0]上加m,遇到END,就说明循环结束了,需要在系数上乘以循环次数.如果次数 ...