
实用数据结构
文章平均质量分 85
Lannister_Stark
这个作者很懒,什么都没留下…
展开
-
POJ2777 Count Color 【简单的线段树】
【题目大意】 现在有一个长度为L cm的板,每一厘米划分成一个格子,一开始每个格子颜色涂为1(1号颜色),之后有O个操作,一共有两种操作: 1、C a b c 代表将区间[a,b]全部刷成c颜色(一共有T种颜色,会读入) 2、P a b 代表询问区间[a,b]有多少种不同的颜色 数据范围:1 注意可能读入的a,b出现a>b的情况,需要交换一下; 【解题思路】(虽然我A了但是貌似时间和空原创 2017-03-30 16:37:22 · 402 阅读 · 0 评论 -
UESTC 841 休生伤杜景死惊开 【线段树】
【题目大意】 给出一个数组A,求出满足iAk的数对(i,j,k)的个数 【解题思路】 第一反应是三元逆序对或者类似的东西,但发现做不出来,于是换思路。 想了一会发现可以直接维护两颗线段树,但是压入的是数值不是下标,一颗处理一下区间和 最后倒回来枚举j求出一个left值和right值(即j对答案的贡献),乘起来累加进答案即可 【代码】 #include #include #includ原创 2017-03-31 12:25:56 · 1419 阅读 · 0 评论 -
HDU 4006 The kth great number【线段树二分】
【题目大意】 输入两个正数n,k,代表n次操作和查询第k大数,有两种操作: 1、I A 代表将A加入序列 2、Q 代表询问第k大数 多组数据,1 【解题思路】 本题采用线段树无疑,但是需要注意的是询问操作。 首先将操作离线,然后将所有I操作对应的A离散化。 然后将A压入线段树,在对应节点处prefix++(prefix就是答案) 然后每遇到一次询问,都在线段树上二分,具体过程见下原创 2017-04-01 08:34:57 · 623 阅读 · 1 评论 -
UESTC 844 程序设计竞赛 【维护值稍多的线段树】
【题目大意】 维护一个序列,使之支持一下两种操作: 1、单点修改 2、查询一个区间子区间最大值(在某个区间中任意寻找一段连续子区间,使得该子区间的和最大)(以下将该值称为‘答案’) 【解题思路】 线段树做法: 考虑维护四种和:sum,suml,sumr,subsum,分别是区间和,左端点开始连续最大和(以下将该值称为‘左始和’),右端点结束连续最大和(以下将该值称为‘右结和’),答案原创 2017-04-01 17:36:15 · 560 阅读 · 0 评论 -
HDU 1166 敌兵布阵 【简单的树状数组||线段树】
【解题思路】 直接树状数组过 【代码】 #include #include #include #include #include #include #include #include #include #include #define LL long long //#define LOCAL #define lowbit(i) (i&(-i)) using namespace std; c原创 2017-04-01 18:16:49 · 387 阅读 · 0 评论 -
UESTC395 Dynamic Query System 【简单平衡树(数组Treap)】
【题目大意】 题目包含多组数据 每组数据读入一个正整数n表示操作数量,接下来n行,每行一个操作 操作分为八种: 1)I X 表示将X插入序列 2)R X 表示将X从序列中删除,注意,由于X可能被插入了多次,所以只要随便删除一个即可 3)S 表示询问该序列的元素个数(重复的也算) 4)L X 表示询问序列中严格比X小的数有多少个 5)W K 表示询问第K大的数是什么(从1开始标号),原创 2017-04-21 20:50:35 · 435 阅读 · 0 评论