hdu 4288 Coder(单点操作,查询)
题意:
三种操作:
1. add x – add the element x to the set;
2. del x – remove the element x from the set;
3. sum – find the digest sum of the set.
The digest sum should be understood by:sum(ai) where i % 5 ==3
where the set S is written as {a1, a2, ... , ak} satisfying a1 < a2 < a3 < ... < ak
数据规格:
N ( 1 <= N <= 105 )
1 <= x <= 109.
思路:
BC做过一题和这个一模一样的,,,哎,,,这题早就做过了,可是BC却没有做出来,,,
这个还要离线处理,因为x很大
代码:
int const maxn=1e5+5;
struct node{
    int cnt;
    ll sum[5];
}tree[maxn<<2];
int n,tot;
int q[maxn],a[maxn];
char ope[maxn][15];
void build(int l,int r,int rt){
    tree[rt].cnt=0;
    memset(tree[rt].sum,0,sizeof(tree[rt].sum));
    if(l==r) return;
    int m=(l+r)>>1;
    build(lson);
    build(rson);
}
void pushUp(int rt){
    rep(i,0,4)
        tree[rt].sum[i]=tree[rt<<1].sum[i]+tree[rt<<1|1].sum[((5-tree[rt<<1].cnt%5)%5+i)%5];
}
void update(int k,int pos,int num,int l,int r,int rt){
    tree[rt].cnt+=k;
    if(l==r){
        tree[rt].sum[0]+=(k*num);
        return;
    }
    int m=(l+r)>>1;
    if(pos<=m)
        update(k,pos,num,lson);
    else
        update(k,pos,num,rson);
    pushUp(rt);
}
int main(){
    //freopen("test.in","r", stdin);
    while(scanf("%d",&n)!=EOF){
        tot=0;
        rep(i,1,n){
            scanf("%s",ope[i]);
            if(ope[i][0]!='s'){
                scanf("%d",&q[i]);
                a[tot++]=q[i];
            }
        }
        sort(a,a+tot);
        tot=unique(a,a+tot)-a;
        //rep(i,0,tot-1) cout<<a[i]<<" "; cout<<endl;
        if(tot==0)
            memset(tree[1].sum,0,sizeof(tree[1].sum));
        else
            build(1,tot,1);
        rep(i,1,n){
            int pos=lower_bound(a,a+tot,q[i])-a+1;
            if(ope[i][0]=='a'){
                update(1,pos,q[i],1,tot,1);
                continue;
            }
            if(ope[i][0]=='d'){
                update(-1,pos,q[i],1,tot,1);
                continue;
            }
            printf("%I64d\n",tree[1].sum[2]);
        }
    }
    //fclose(stdin);
}
hdu 4288 Coder(单点操作,查询)的更多相关文章
- HDU 4288 Coder (线段树)
		Coder 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4288 题意:有三种类型的操作,(1)."add x",表示往集合里加入�数 ... 
- HDU 4288 Coder ( 离散化 + 离线 + 线段树 )
		这题跟ZOJ 3606的解题思路很相似. 题意:有3中操作:1.向集合中增加一个数x(1≤x≤1e9):2.从集合中删去一个数x(保证这个数存在):3.查询集合中所有位置满足i%5==3的数a[i]的 ... 
- HDU 4288 Coder(线段树)
		题意: 给定三种操作 1. add x 向序列中添加x,添加之后序列还保持有序 2. del x 删除序列中值为x的元素 3. sum 求下边模5等于3的元素和 思路: 直接暴力也可以过,就是看暴 ... 
- hdu 4288 Coder (线段树+离线)
		题意: 刚开始有一个空集合.有三种操作: 1.往集合中加入一个集合中不存在的数 x 2.从集合中删除一个已经存在的数 x 3.计算集合的digest sum并输出. digest sum求 ... 
- hdu 4288 Coder
		线段树好题,和 15 年的广东省省赛 C 题有相似之处,一开始我的思路有偏差,看了别人的博客后感觉处处技巧都是精华,主要是区间合并的技巧一时很难想到,先附上代码: #include<cstdio ... 
- HDU 4288 Coder 【线段树+离线处理+离散化】
		题意略. 离线处理,离散化.然后就是简单的线段树了.需要根据mod 5的值来维护.具体看代码了. /* 线段树+离散化+离线处理 */ #include <cstdio> #include ... 
- 线段树(单点更新) HDOJ 4288 Coder
		题目传送门 #include <cstdio> #include <cstring> #define lson l, m, rt << 1 #define rson ... 
- hdu 4288 离线线段树+间隔求和
		Coder Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ... 
- 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句
		如题: 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句不是一条关联查询语句. 例如: $list = $db->relation(true) ... 
随机推荐
- 数据结构逆向分析-List
			数据结构逆向分析-List 首先STL中的List就是一个链表,但是肯定C++用了很多封装,所以这里我们来一探究竟. 开始 首先先写一些简单的分析的源代码: #include<iostream& ... 
- java.lang.NullPointerException: Attempt to invoke virtual method 'int com.example.xxx.Json.NewsBean.getError_code()' on a null object reference错误解决
			AS在运行的过程中出现了错误: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.example.xx ... 
- 利用 uber-go/dig 库管理依赖
			利用 uber-go/dig 库管理依赖 github 地址 官方文档 介绍 dig 库是一个为 go 提供依赖注入 (dependency injection) 的工具包,基于 reflection ... 
- localStorage util
			// localStorage util var db ={ set : function(key, obj){ localStorage.setItem(key, JSON.stringify(ob ... 
- 重新嫁接rm命令
			### 重定义rm命令 #### 定义回收站目录trash_path='~/.trash'# 判断 $trash_path 定义的文件是否存在,如果不存在,那么就创建 $trash_path.if [ ... 
- prometheus+grafana实现服务监控
			一.安装prometheus: 下载相应的版本 :https://prometheus.io/download/ 解压: Linux:tar -zxvf XXX.tar.gz windows:直接下载 ... 
- centos7 kubeadm 搭建k8s
			Centos 7 搭建 kubernetes 集群环境 一.介绍 本次是centos7 搭建kubernetes1.15.9 通过kubeadm 的形式搭建 二.准备 > centos 7 (镜 ... 
- Python如何连接Mysql及基本操作
			什么要做python连接mysql,一般是解决什么问题的 做自动化测试时候,注册了一个新用户,产生了多余的数据,下次同一个账号就无法注册了,这种情况怎么办呢?自动化测试都有数据准备和数据清理的操作,如 ... 
- Python3入门系列之-----看完这一篇文章我终于学会了类
			前言 类顾名思义,就是一类事物.或者叫做实例,它用来描述具有共同特征的一类事物.我们在Python中声明类的关键词是class,类还有功能和属性,属性就是这类事物的特征,而功能就是它能做什么,也是就是 ... 
- Springboot中使用Redisson实现分布式锁
			1. 概述 老话说的好:便宜没好货,有价值的商品,即使再贵,也有人会买. 言归正传,今天继续讨论有关"锁"的话题,synchronized 和 ReentrantLock 大家应该 ... 
