HDU4288 Coder(线段树)】的更多相关文章

注意添加到集合中的数是升序的,先将数据读入,再离散化. sum[rt][i]表示此节点的区域位置对5取模为i的数的和,删除一个数则右边的数循环左移一位,添加一个数则右边数循环右移一位,相当于循环左移4位,线段树与树状数组结合,树状数组确定位置. le[rt]表示左移的位数,区间更新懒惰标记 #include <iostream> #include <cstdio> #include<cstdlib> #include<map> #include<alg…
Problem Description In mathematics and computer science, an algorithm describes a set of procedures or instructions that define a procedure. The term has become increasing popular since the advent of cheap and reliable computers. Many companies now e…
Coder Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2547    Accepted Submission(s): 1013 Problem Description In mathematics and computer science, an algorithm describes a set of procedures o…
题意: 给定三种操作 1. add x 向序列中添加x,添加之后序列还保持有序 2. del x  删除序列中值为x的元素 3. sum  求下边模5等于3的元素和 思路: 直接暴力也可以过,就是看暴力写的好不好了.用数组直接暴力可过. 暴力代码: #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ; typedef long long ll; int a[max…
题意: 刚开始有一个空集合.有三种操作: 1.往集合中加入一个集合中不存在的数 x 2.从集合中删除一个已经存在的数 x 3.计算集合的digest sum并输出.       digest sum求法:将集合中所有数从小到大排序,得到a1<a2<...<an. digest sum = sum(ai) where i mod 5 = 3 数据范围: N ( 1 <= N <= 105 ) 1 <= x <= 109. For any "add x&qu…
Coder 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4288 题意:有三种类型的操作,(1)."add x",表示往集合里加入�数x.(2)."del x"表示将集合中数x删除.(3)."sum"求出从小到大排列的集合中下标模5为3的数的和.集合中的数都是唯一的. 思路:这题巧妙的地方在于先离线输入,然后离散化.输入的数字依照从小到大排序,然后作为线段树的叶子结点.每一个结点包括两个部分,一是该结…
题目传送门 题意:集合,add x, del x, 求和 分析:首先,暴力可以过这题.用上线段树能大大降低时间的消耗,具体就是类似开了5棵线段树,每个节点都有5个空间,表示该区间的id%5后的和,区间合并右边的id‘ = i + leftnum,子节点要存到sum[o][1]表示%5=1.还需要对数据离线离散化. //#include <bits/stdc++.h> #include <cstdio> #include <algorithm> #include <…
题意略. 离线处理,离散化.然后就是简单的线段树了.需要根据mod 5的值来维护.具体看代码了. /* 线段树+离散化+离线处理 */ #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; typedef long long ll; #define N 100010 ll sum[N<<2][5]; int a…
主题链接: huangjing 题意: 题目中给了三个操作 1:add x 就是把x插进去  2:delete x 就是把x删除 3:sum 就是求下标%5=3的元素的和. 另一个条件是插入和删除最后都要保证数列有序. .. 首先告诉一种暴力的写法. .由于时间很充足,须要对stl里面的函数有所了解. . 就是直接申明一个vector的容器.然后直接用vector里面的操作比方 insert,erase等等操作. .只是这个效率非常低.. 最后跑出来6000多ms. .(强哥的代码) 代码: #…
这题跟ZOJ 3606的解题思路很相似. 题意:有3中操作:1.向集合中增加一个数x(1≤x≤1e9):2.从集合中删去一个数x(保证这个数存在):3.查询集合中所有位置满足i%5==3的数a[i]的和,集合中的数按升序排列.给你一共N个操作,输出每次查询的和. 做法:因为操作只有10^5个,所以将所有查询中的数保存下来,排序之后离散化.每个数对应一个“位置”,通过标记这个“位置”是否已用来表示该数是否在集合中. 线段树节点记录两个信息: cnt:这一段“位置”中含有多少个数,pushUp的时候…