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

题意:add 就是在集合里面加上一个数x; del 就是从集合里删去一个数x; sum是求位置i%5==3的数的和。

tree[i].sum[5] 里面数组存的是不同位置%5之后分别对应的和。

  1 #include <cstdio>
  2 #include <cstring>
  3 #include <algorithm>
  4 #define maxn 100010
  5 using namespace std;
  6
  7 char str[maxn][4];
  8 int x[maxn],xx[maxn];
  9 struct node
 10 {
 11     int r,l;
 12     __int64 sum[6];
 13     int cnt;
 14 }tree[maxn*4];
 15
 16 void build(int i,int l,int r)
 17 {
 18     tree[i].l=l;tree[i].r=r;
 19     for(int j=0; j<5; j++) tree[i].sum[j]=0;
 20     tree[i].cnt=0;
 21     if(l==r) return ;
 22     int mid=(l+r)>>1;
 23     build(i<<1,l,mid);
 24     build(i<<1|1,mid+1,r);
 25 }
 26
 27 void update(int i,int l,int r,int c,int num)
 28 {
 29     tree[i].cnt+=num;
 30     if(tree[i].l==l&&tree[i].r==r)
 31     {
 32         tree[i].sum[0]+=c;
 33         return ;
 34     }
 35     int mid=(tree[i].l+tree[i].r)>>1;
 36     if(r<=mid)
 37     {
 38         update(i<<1,l,r,c,num);
 39     }
 40     else if(l>mid)
 41     {
 42         update(i<<1|1,l,r,c,num);
 43     }
 44     else
 45     {
 46         update(i<<1,l,mid,c,num);
 47         update(i<<1|1,mid+1,r,c,num);
 48     }
 49     for(int j=0; j<5; j++)
 50     {
 51         tree[i].sum[j]=tree[i<<1].sum[j]+tree[i<<1|1].sum[((j-tree[i<<1].cnt)%5+5)%5];
 52     }
 53 }
 54 int bs(int l,int r,int data)
 55 {
 56     while(l<=r)
 57     {
 58         int mid=(l+r)>>1;
 59         if(xx[mid]==data)
 60         {
 61             return mid;
 62         }
 63         else if(xx[mid]>data)
 64         {
 65             r=mid-1;
 66         }
 67         else
 68             l=mid+1;
 69     }
 70 }
 71 int main()
 72 {
 73     int n;
 74     while(scanf("%d",&n)!=EOF)
 75     {
 76         int t1=0;
 77         for(int i=0; i<n; i++)
 78         {
 79             scanf("%s",str[i]);
 80             if(strcmp(str[i],"sum"))
 81             {
 82                 scanf("%d",&x[i]);
 83                 xx[t1++]=x[i];
 84             }
 85         }
 86         sort(xx,xx+t1);
 87         t1=unique(xx,xx+t1)-xx;
 88         build(1,1,t1);
 89         for(int i=0; i<n; i++)
 90         {
 91             int l1=bs(0,t1-1,x[i]);
 92             if(!strcmp(str[i],"add"))
 93             {
 94                 update(1,l1+1,l1+1,x[i],1);
 95             }
 96             else if(!strcmp(str[i],"del"))
 97             {
 98                 update(1,l1+1,l1+1,-x[i],-1);
 99             }
100             else if(!strcmp(str[i],"sum"))
101             {
102                 printf("%I64d\n",tree[1].sum[2]);
103             }
104         }
105     }
106     return 0;
107 }

View Code

转载于:https://www.cnblogs.com/fanminghui/p/3913871.html

hdu 4288 Coder相关推荐

  1. hdu 4288 Coder (成都赛区 线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=4288 题意: 给出一个有序集合,3种操作.插入一个数,删除一个数,都保证序列有序.以及求和 其中求和是将下标%5 ...

  2. HDU 4288 Coder [线段树]

    维护一个可以插入删除的有序序列,每次询问序列中位置mod5=3的数的和. CodeForces原题,因为时限给的太宽,数据太水,STL可以暴力过. 用线段树和平衡树都可以做这题,线段树需要先离散化,然 ...

  3. Coder HDU - 4288

    Coder HDU - 4288 题意:你有n次操作,每次可以往集合里插入元素,删除元素,然后如果是求和操作的话,是求升序排序的情况下,pos%5==3的位置的数之和. 思路:因为要开权值线段树数很大 ...

  4. 数据结构---线段树

    线段树 转载请注明出处,谢谢!http://blog.csdn.net/metalseed/article/details/8039326  持续更新中···   一:线段树基本概念 1:概述 线段树 ...

  5. 线段树详解 (原理,实现与应用)

    线段树详解 By 岩之痕 目录: 一:综述 二:原理 三:递归实现 四:非递归原理 五:非递归实现 六:线段树解题模型 七:扫描线 八:可持久化 (主席树) 九:练习题 一:综述 假设有编号从1到n的 ...

  6. 【转载】线段树题目2

    1.hdu1166 敌兵布阵 更新节点,区间求和. 2.hdu1754 I Hate It 更新节点,区间最值. . 3.hdu1698 Just a Hook 成段更新,总区间求和. . 4.hdu ...

  7. 2012成都网络赛赛后【缺CHJ】

    A Coder (HDU 4288,与Codeforces 85D相同) 应该用线段树写,我是块状链表水过了 #include<map>#include<cstdio>#inc ...

  8. HDU 4883 Best Coder Round 2 TIANKENG’s restaurant 解读

    有一组数据是在客人到达和出发时间,问:多少把椅子的能力,以满足所有客人的需求,可以有一个地方坐下要求. 有些人甚至开始考虑暴力法,这些数据是少,其实这个问题很多数据, 暴力需求O(n*n)的时间效率, ...

  9. HDU题目分类大全【大集合】

    基础题: 1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.  1032.1037.1040.1048.1056.105 ...

最新文章

  1. 【codeforces 508B】Anton and currency you all know
  2. 在Angular中有多个字段
  3. Android 实现文件上传功能(upload)
  4. 牛客 数素数 (20)
  5. 【嵌入式】嵌入式天地博客汇总
  6. Create React App 2.0 正式发布:Babel 7、webpack 4 等
  7. 二进制编译安装mysql(centos6、7)和源码编译bind
  8. php获取时间计算时间差
  9. 8.RabbitMQ实战 --- 从Web端管理RabbitMQ
  10. 扫雷外挂(扫雷辅助程序)
  11. [Python从零到壹] 三十四.OpenCV入门详解——显示读取修改及保存图像
  12. 融云 SDK 5.0.0 功能迭代
  13. 2011 北邮计算机研究生各组分数线
  14. P3717 [AHOI2017初中组]cover——洛谷(差分)
  15. 谷胱甘肽修饰CdTe/CdS量子点(GSH-CdTe/CdSQDs);溶菌酶(Lyz)修饰Ag2S量子点(Lyz-Ag2S QDs)齐岳定制服务
  16. python安装random_如何安装python randon
  17. 安装xmanager linux系统,xmanager linux版
  18. 刘润:进化的力量年度演讲全文图解
  19. 期货平仓是先开先平吗(期货怎么先平新仓)
  20. Java JNA (二)—— dll回调函数实现

热门文章

  1. 量化指标公式源码_通达信实用指标:《看涨跌》指标公式源码
  2. mysql存储过程queue_mysql – 在Sequelize中调用输入/输出类型存储过程
  3. filter vue 循环_Vue - 基础
  4. python动态执行代码_第6.6节 Python动态执行小结
  5. python随机抽号_随手小代码——Python 从集合中随机抽取元素
  6. 如何优雅的解决mac安装zsh不执行.bash_profile
  7. Android获取顶部状态栏statusBar高度、底部导航栏navigationBar高度
  8. 思科安全:加密流量威胁检测、加密流量威胁和恶意软件检测、识别无线干扰或威胁、Talos 情报源可加强对已知和新型威胁的防御、分布式安全异常检测...
  9. DNS RR代码和含义
  10. 对计算属性中get和set的理解