数据结构
yuukilp
Full Of Curiosity
展开
-
codechef November Challenge 2014 .Chef and Churu
链接地址:here题意: 给NN(≤105\le 10^5)个数,给定NN个函数,每个函数为序列中第LiL_i 到第RiR_i个数的和,有QQ(≤105\le 10^5)个询问,有两种类型的操作: 1 xx yy 把序列中的第xx个数改为yy 2 mm nn 求第mm个函数到第nn个函数的和 思路: 分块+树状数组 对N个函数进行分块,分块处理出每个块内,原创 2015-10-02 19:13:23 · 688 阅读 · 0 评论 -
HDU 5662 YJQQQAQ and the function
题意: YJQQQAQ has an array A of length n. He defines a function fl,r,k where l,r,k are positive integers that satisfies l≤r and r×k≤n, and the value of the function equals to p×q×⌊k√⌋ where p equals to原创 2016-04-10 10:21:16 · 425 阅读 · 0 评论 -
HDU 5638 Toposort
题意: 给定一个 DAG,准确地删除 kk 条边,求可以得到的最小的拓扑序! (1≤n≤100000,0≤k≤m≤200000)(1 \le n \le 100000, 0 \le k \le m \le 200000) 解释: 数据结构 + 拓扑排序 不错的题 题目要求字典序最小,所以应该尽可能的把小的数放在前面,假设当前还剩余 kk 条边可以删除,那么我就需要去找所有入原创 2016-03-07 20:45:55 · 433 阅读 · 0 评论 -
HDU 5654 xiaoxin and his watermelon candy
题意: 给定一个数组,询问区间内有多少个满足要求的不同的三元组,三元组要求: j=i+1,k=j+1j = i + 1, k = j + 1 ,ai≤aj≤aka_i \leq a_j \leq a_k 思路: 很裸的主席树求区间内不同的数的个数,这类问题的方法就是,用数组 pre[i]pre[i] 表示前一个与 a[i]a[i] 相同的数的位置,以 prepre 数组为关键字,对于询问原创 2016-03-30 21:07:42 · 377 阅读 · 0 评论 -
主席树学习
普及贴,大牛绕道。。。。主席树简直神,看了很多关于这个算法的资料,还是不能一下子明白,建议学习主席树的时候,算法讲解的话,直接眼睛扫一遍就好了,不要指望别人能讲清楚,还是要自己看代码理解。老规矩,从这个题 POJ 2104 说起,题意求任意区间的第 KK 大。不带修改的静态的主席树。 以数据:5 5 2 4 1 3 2 5 3为例首先我们呢需要把所有的数离散化一下。。从代码看起:建树:int bu原创 2015-12-08 12:20:26 · 642 阅读 · 0 评论 -
2015 ACM/ICPC Asia Regional Shenyang Online C. Minimum Cut[树链剖分]
转载地址:这里题意: 给一个无向图和它的一个生成树,要求找到一个最小割,使得有且只有一条生成树上的一条边属于割集,输出割集的大小。 分析: 因为生成树中只有一条边属于割集,那么割对生成树来说只是分成了两个子树,那么就考虑割生成树上割哪条边是最优的。首先用生成树建树剖,对于每条非树边的两个端点u和v,对 u – v 在生成树上的简单路径上的边权值加一,最后找到所有边权值最小的边,就是属于最小割转载 2015-11-28 22:10:42 · 421 阅读 · 0 评论 -
树链剖分学习
啊,好无聊所以又爬了一下午的树。这次是树链剖分,讲道理,从例题出发,SPOJ QTREE。题意就是动态修改变权值,求树上两点之间的所有边权的最大值。我的体会: 其实就是在树上dfs一遍,记录下每个节点的dfs序,只不过这里的dfs是优先去选最长的链的(即那个儿子节点的子树节点数目越多就去访问谁)。代码如下: void buildTree(int v,int tp) { T[v] = ++原创 2015-11-28 18:08:52 · 311 阅读 · 0 评论 -
树套树学习
标题扯的有点宽泛,树套树分很多种吧,会慢慢学习下,然后学习笔记会更新到这里(立flag 中。。。)线段树套树状数组从这个题 “Dynamic” Inversion 说起吧!就是求动态逆序对,比较经典的问题,解法也比较多。(博主偷懒中。。。。)原创 2015-11-28 13:26:44 · 405 阅读 · 0 评论 -
CDQ分治学习
通过这个题SPOJ LIS2学习了下CDQ分治,巧妙之处在于区间拆半,用左区间来更新右区间。 题目就是求最长的二维LIS,也就是三维偏序。把每对值(x,y)(x,y) 的下标作为第一维,xx 作为第二维,yy 作为第三维,然后分区间地去处理。大致代码如下:void CDQ(int L,int R) { if(L == R) return; int m = (L+R) >> 1;原创 2015-11-27 13:04:21 · 449 阅读 · 0 评论 -
codeforces 86D. Powerful array(分块)
题意: 给定一个数列:A1,A2,⋯AnA1, A2,\cdots An,定义KsK_s为区间(l,r)(l,r)中ss出现的次数。 tt个查询,每个查询l,rl,r,对区间内所有a[i]a[i],求∑(K2s⋅a[i])\sum(K_s^2\cdot a[i]) 思路: 考虑到时间消耗来自于L,RL ,R指针的移动,如果没有分块的话,直接根据左端点小的排在前面,左端点相同的按右端点小原创 2015-09-24 11:52:16 · 944 阅读 · 0 评论 -
Codeforces Round #337 (Div. 2) D.Vika and Segments
题意: 给定 NN 条垂直于坐标轴的线段,线段的宽度均为 11,求最后这些线段被覆盖的面积? 思路: 很裸的矩形面积并,扫描线,套版为上,绝杀了! 主要是贴个版。 代码:#include <cstdio> #include <cstring> #include <queue> #include <algorithm> #include <iostream> #include <cm原创 2015-12-28 11:05:46 · 643 阅读 · 0 评论 -
Codeforces Round #316 (Div. 2) D. Tree Requests
Codeforces Round #316 (Div. 2) D. Tree Requests题意: 给一棵树,每个节点上都唯一对应一个单词,给M个询问,问节点u的子树中,深度为h的节点上所有的单词以任意次序组合起来能否构成回文串? 思路: 首先呢,我们必须得处理出内节点所在的深度,而且得知道对应深度下有哪些节点存于vector数组H[d]中,但是问题就是询问仅涉及到节点为u的子树的哪些节点原创 2015-08-16 15:07:34 · 593 阅读 · 0 评论 -
codeforces gym 100342F Move to Front
题意: 给一个1-N的排列,给M个询问,每次问编号为x的数在数组的第几个位置,同时把编号为x的这个数提到数组的最前面。 思路: 首先我们得知道编号为x的数前面有多少个数,这个时候就是可以用树状数组来优化了,我们记录开个数组mp记录一下编号为x的数在树状数组中的位置是多少,同时每次询问的时候直接得到它在树状数组中的位置,然后又直接求和就是可以得到答案了啊,然后就是去维护一个把数提上前的操作了,原创 2015-08-09 22:40:25 · 541 阅读 · 0 评论 -
Codeforces Round #321 (Div. 2) E - Kefa and Watch(hash + 线段树)
题意: 题意大概是给你一串长度为n的数字串,两个操作,1 l r c 将 下标为l 到 r 的数字全部改为 c 2 l r c 询问 下标为l 到 r 的数字 循环节是否为 c n 的范围是10W, 第二个c的范围是10 思路: 做法就是字符串hash啦,因为字符串hash类似于前缀和的处理,也就是说:比如区间(v1)[L,mid(v1)[L,mid和区间(v2)mid+1(v原创 2015-09-23 23:28:04 · 537 阅读 · 0 评论 -
CodeChef JUNE17 - Chef and Prime Queries
题意 给定包含 NN 个数的序列 aa,求序列[L,R][L, R] 内的数,以范围在[x,y][x, y] 内的质数为底的指数之和!包含Q个询问。 N≤105N \le 10^5, x,y≤106x, y \le 10^6 思路 序列 aa 所有数的质数表示为 pk11...pknnp_1^{k_1}...p_n^{k_n},每个质数都对答案都会产生一个贡献数组,那么问题就转化为一个原创 2017-07-03 15:38:55 · 318 阅读 · 0 评论