题意:支持增删,查操作,最后的序列式递增的。

做法:主要是如何维护mod5的sum值,这里左儿子可以不用管,关键是右儿子的处理,可以假设右儿子有t个节点,左儿子有cnt个节点,

则令(t+cnt)MOD 5= i 则tmod5=(i-cnt MOD 5)MOD 5 ,所以剩下的就是维护每个节点的节点总数以及相应的和就好了。

1 #include<cstring>

 2 #include<algorithm>
 3 #include<cstdio>
 4 typedef long long ll;
 5 using namespace std;
 6 #define lz u<<1,l,mid
 7 #define rz u<<1|1,mid+1,r
 8 const int MAX = +;
 9 struct node
 {
     ll sum[],cnt;
 }tree[MAX<<];
 int num[MAX],rnum[MAX],check[MAX];
 void build(int u,int l,int r)
 {
     for(int i=;i<;i++) tree[u].sum[i]=;
     tree[u].cnt=;
     if(l!=r)
     {
         int mid=(l+r)>>;
         build(lz); build(rz);
     }
 }
 void add(int u,int l,int r,int x,int d,int cur)
 {
     if(l==r)
     {
         tree[u].sum[]+=d;
         tree[u].cnt+=cur;
         return;
     }
     int mid=(l+r)>>;
     if(x<=mid) add(lz,x,d,cur);
     else add(rz,x,d,cur);
     tree[u].cnt=tree[u<<].cnt+tree[u<<|].cnt;
     for(int i=;i<;i++)
     {
         tree[u].sum[i]=tree[u<<].sum[i]+tree[u<<|].sum[((i-tree[u<<].cnt)%+)%];
     }
 }
 int main()
 {
     int n,a; char str[];
     while(scanf("%d",&n)==)
     {
         int cur=;
         for(int i=;i<n;i++)
         {
             scanf("%s",str);
             if(str[]=='a')
             {
                 check[i]=;
                 scanf("%d",&a);
                 num[i]=rnum[cur++]=a;
             }
             else if(str[]=='d')
             {
                 check[i]=;
                 scanf("%d",&num[i]);
             }
             else  check[i]=;
         }
         sort(rnum,rnum+cur);
         int tot=unique(rnum,rnum+cur)-rnum;
         if(tot!=) build(,,tot);
         for(int i=;i<n;i++)
         {
             if(check[i]==)
             {
                 int pos=lower_bound(rnum,rnum+tot,num[i])-rnum+;
                 add(,,tot,pos,num[i],);
             }
             else if(check[i]==)
             {
                 int pos=lower_bound(rnum,rnum+tot,num[i])-rnum +;
                 add(,,tot,pos,-num[i],-);
             }
             else
             {
                 if(tot==) printf("0\n");
                 else
                 {
                     printf("%I64d\n",tree[].sum[]);
                 }
             }
         }
     }
     return ;
 }

hdu4288 Coder(线段树单点更新)的更多相关文章

  1. HDU 1754 I Hate It 线段树单点更新求最大值

    题目链接 线段树入门题,线段树单点更新求最大值问题. #include <iostream> #include <cstdio> #include <cmath> ...

  2. HDU 1166 敌兵布阵(线段树单点更新)

    敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...

  3. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)

    题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  4. HDU 1166 敌兵布阵(线段树单点更新,板子题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  5. POJ 1804 Brainman(5种解法,好题,【暴力】,【归并排序】,【线段树单点更新】,【树状数组】,【平衡树】)

    Brainman Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10575   Accepted: 5489 Descrip ...

  6. HDU 1166 敌兵布阵(线段树单点更新,区间查询)

    描述 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况 ...

  7. POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和)

    POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根 ...

  8. HDUOJ----1166敌兵布阵(线段树单点更新)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)

    HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...

  10. POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)

    POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化) 题意分析 前置技能 线段树求逆序对 离散化 线段树求逆序对已经说过了,具体方法请看这里 离散化 有些数 ...

随机推荐

  1. deepin 安装maven

    1.在官网 http://maven.apache.org/download.cgi 下载mvn包   2.新建mvn目录 mkdir  /usr/local/mvn 把压缩包解压到mvn目录下面 修 ...

  2. Objective-C设计模式——适配器Adapter(接口适配)

    适配器模式 适配器模式通俗来讲,其实就是对客户端添加新的类但却不修改客户端和新的类的接口.此时我们需要自己来实现适配,在适配器模式中有Target对象,即客户端所需要的接口对象,Adaptee对象,即 ...

  3. React 篇 Comment Model

    Model 原型 Comment Box <div className="commentBox"> <h1>Comments</h1> < ...

  4. pycharm永久激活(转载)

    转载自CSDN--http://blog.csdn.net/mr_hhh/article/details/79062747 2018-02-2417:30:52 今天再补充一个教程,关于pycharm ...

  5. 如何取消android studio启动时自动打开上次关闭的项目

    Androidstudio默认每次android studio启动就会自动打开上次关闭的项目,如果想要取消并让它显示此界面 只需要  

  6. C++(变量类型-深入)

    变量类型 变量其实只不过是程序可操作的存储区的名称.C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上. 变量的名称可以由字母.数字 ...

  7. 小知识~清除系统盘的Hiberfil.sys

    Hiberfil.sys这个文件是系统休眠用的,时间长了你可能会占用几个G的磁盘空间,有时我们并不需要它,而又无法直接删除,这时,你可以使用CMD命令来关闭这个功能,关闭后,这个文件自动被删除. 1 ...

  8. C++标准库 vector排序

    前天要做一个对C++ STL的vector容器做一个排序操作,之前一直把vector当做一个容量可自动变化的数组,是的,数组,所以打算按照对数组进行排序的方法:用快速排序或是冒泡排序等算法自己写一个排 ...

  9. MySQL单表数据不超过500万:是经验数值,还是黄金铁律?

    今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢? 曾经在中国互联网技术圈广为流传着这么一个 ...

  10. @ControllerAdvice全局异常拦截

    @ControllerAdvice 拦截异常并统一处理 在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder ...