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

做法:主要是如何维护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. loadrunner乱码解决

    对于Virtual User Generator,本机编码方式为GB2312,GBK,GB18030,因此要修改为utf-8 1.录制过程产生的乱码解决方法: 在tool→recording opti ...

  2. JavaScript编程艺术-第7章代码汇总(2)

    [7.4节] 重回“JavaScript美术馆”代码 ***亲测可用*** HTML: JS:

  3. C# 生成 bmp 格式的图片

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; usin ...

  4. [转]ASP.NET MVC Domain Routing

    本文转自:http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx ASP.NET MVC Domai ...

  5. Previous operation has not finished; run 'cleanup' if it was interrupted.SVN报错

    原因: 错误的原因是SVN管理的文件夹改名.删除文件太过频繁,导致有操作挂起了. 解决方式: 1.百度sqlite3.exe并下载. 2.将该文件解压到项目根目录下的.svn文件夹中. 3.打开cmd ...

  6. js解析地址栏参数

    /** * 获取地址栏中url后面拼接的参数 * eg: * 浏览器地址栏中的地址:http://1.1.1.1/test.html?owner=2db08226-e2fa-426c-91a1-66e ...

  7. JProfiler 9.1.1部署及使用

    软件准备: 官网下载地址:http://www.ej-technologies.com/download/jprofiler/files 软件部署: windows安装双击即可. 注册号: L-Lar ...

  8. [Windows Server 2008] IP安全策略限制端口方法

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:限制143 ...

  9. HiveServer2后台运行

    nohup hive --service hiveserver2 & 或者直接: nohup hiveserver2 &

  10. swift- mutating

    struct Stack<Element> { var items = [Element]() func push(_ item:Element){ self.items.append(i ...