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

做法:主要是如何维护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. bzoj 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路【Floyd】

    弗洛伊德之后按序列加起来即可 #include<iostream> #include<cstdio> #include<algorithm> using names ...

  2. mui 文件上传注意问题

    1. mui 文件上传 key对应后台接收参数名,但对对于多文件上传就没办法了,addFile 的key不能重复 task.addFile( "_www/a.doc", {key: ...

  3. OpenSSL 1.0.0生成p12、jks、crt等格式证书的命令个过程

    OpenSSL 1.0.0生成p12.jks.crt等格式证书的命令个过程   此生成的证书可用于浏览器.java.tomcat.c++等.在此备忘!     1.创建根证私钥命令:openssl g ...

  4. SQL在一张表中根据父ID获取所有的子ID

    with a as ( select id,name,parentid from categories where id=53 union all select x.id,x.name,x.paren ...

  5. 简单3步,你即可以用上myFocus

    Step 1. 在html的标签内引入相关文件 <script type="text/javascript" src="js/myfocus-2.0.0.min.j ...

  6. Java设置全局热键——第三方包jintellitype实现

    Java原生API并不支持为应用程序设置全局热键.要实现全局热键,需要用JNI方式实现,这就涉及到编写C/C++代码,这对于大多数不熟悉C/C++的javaer来说,有点困难.不过幸好,国外有人已经实 ...

  7. ARP劫持处理指令集

    第一组(据传xp有效,未实验) arp -a arp -d arp -s IP地址 MAC地址 第二组(windows2008R2有效,已实验) netsh i i show in (记住其中本地连接 ...

  8. 自学php【二】 PHP计算时间加一天

    最近几天在做一个项目,主要是将SQLserver数据到MySQL数据库,一个url跑一次 同步一次昨天的数据,由于很多数据需要同步,所以做了一个操作界面的,一个单纯跑url的 在其中涉及到了对于时间的 ...

  9. 关于.Net的强名称(Strong Name)

    下面是我在CSDN上发表的<关于.Net的强名称(Strong Name)>,转载于此. 关于.Net的强名称(Strong Name)  

  10. Masonry 原理一

    Under the hood Auto Layout is a powerful and flexible way of organising and laying out your views. H ...