数据结构
文章平均质量分 62
fanesemyk
这个作者很懒,什么都没留下…
展开
-
区间修改的离线查询(询问在修改后)
抄袭自卿爷博客 区间修改的离线查询(询问在修改后) 给出长度为n的序列,m次修改,每次在区间[xi,yi]加上一个数ci,求最后每个数是多少。 活用前缀和的思想,如果现在xi出加上ci,yi +1处减去ci,最后用前缀和扫一遍过去后,就相当于在[xi,yi]上加上ci。 for (int i=0; in; i++) a[i]=0; while(m--转载 2016-08-15 20:07:26 · 579 阅读 · 0 评论 -
HDU5671-Matrix 区间加减
Problem Description There is a matrix M that has n rows and m columns (1≤n≤1000,1≤m≤1000).Then we perform q(1≤q≤100,000) operations: 1 x y: Swap row x and row y (1≤x,y≤n); 2 x y: Swap原创 2017-05-18 22:08:04 · 344 阅读 · 0 评论 -
找规律 树状数组求逆序对 hdu1394
这道题需要注意题目给出的一个特殊条件:数是0-n-1的一个排列。 那么我们就可以得到一个逆序对数量的递推公式。 #include using namespace std; int tree[5010]; int n,a[5010]; void add(int k,int num) { while(k<=n) { tree[k]+=num; k+=原创 2017-05-09 15:17:48 · 325 阅读 · 0 评论 -
hdu 1754 单点更新
#include using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int maxn=200000+10; int n,m; long long tree[maxn<<2]; void PushUp(int rt) { tree[rt]=max(tree[rt<<1],tree[rt<<1|1原创 2017-05-08 14:41:07 · 212 阅读 · 0 评论 -
HDU 1166 线段树单点更新
#include #define lson l , m , rt << 1 #define rson m + 1 , r , rt << 1 | 1 const int maxn = 55555; int sum[maxn<<2]; void PushUP(int rt) { sum[rt] = sum[rt<<1] + sum[rt<<1|1]; }原创 2017-05-08 14:40:18 · 226 阅读 · 0 评论 -
HDU 2795 线段树单点更新 好题
不看样例的话,很容易理解错题目。这里把h当做行,每个纸条都从上往下找有没有可以放的;如果可以放是直接拼接在之前纸条的后边。 那么这道题是怎么联想到线段树的呢? 把1-h这h行,看做h个数;初始大小都为w(代表每一行可以放多长的纸条)。对于每一个纸条长度x,都从上到下寻找是否存在一个数大于等于x。如果存在,输出这个数所在行号,并更新(减去x)。 那么我们只要维护一颗最大值线段树,修改一下查询的原创 2017-05-10 18:40:28 · 307 阅读 · 0 评论 -
Treap 基本ADT
因为计算几何的PA要求BBST和优先队列,就百度学习了一下Treap的用法。。。 这里要安利一下byvoid大牛的这篇论文,讲的非常好! http://www.docin.com/p-456402313.html?qq-pf-to=pcqq.c2c 接下来就是把他的代码抄过来,然后一些小错误改一下。。。 struct Treap_Node { Treap_Node *l转载 2017-03-25 00:29:56 · 261 阅读 · 0 评论 -
模板 字典树
一、知识简介 最近在看字符串算法了,其中字典树、AC自动机和后缀树的应用是最广泛的了,下面将会重点介绍下这几个算法的应用。 字典树(Trie)可以保存一些字符串->值的对应关系。基本上,它跟 Java 的 HashMap 功能相同,都是 key-value 映射,只不过 Trie 的 key 只能是字符串。 Trie 的强大之处就在于它的时间复杂度。它的插入和转载 2016-08-12 17:03:00 · 313 阅读 · 0 评论 -
poj 1990 MooFest 树状数组
第三道树状数组模板题,但还是看了题解才会,好菜啊。。。。 首先,我们要确定这道题的基本思路,那就是对每一个点(x0,v0),找到对应的其他点(其v值小于等于v0),并且算出其贡献值。 看到小于等于,脑子里立马浮现出树状数组!但是这道题比较麻烦,关键在于它的贡献算法比较奇葩,居然还要算x差的绝对值。那么怎么做呢? 关键就在于树状数组存的是什么东西(的和)!一般来说,按照套路,我们都是存x值的。原创 2016-08-17 20:54:06 · 395 阅读 · 0 评论 -
最智障的离散化
离散化是啥呢! 反正现在我觉得是给了一组数据,个数不多,但是数的范围都很大,而且(很重要!!!)题目要求比较两个数的大小,而不要求知道这个数具体是多少。那么,我们可以做一个映射,把这些数映射到一个较小的范围内(一般是数据个数),需要保证数的大小关系不变化。有点像hash map的思路。 离散化是一种常用的技巧,有时数据范围太大,可以用来放缩到我们能处理的范围; 因为转载 2016-08-16 21:01:38 · 275 阅读 · 0 评论 -
poj 2352 Stars 树状数组
一开始做这题我是懵逼的,然后看了题解才懂。题目里有两个重要条件不能忽视,一个是给出的数据是以y为第一优先级,x为第二优先级给出来的,第二个是xy都是有范围的。 那么首先我们很容易想到这个算法:对每一个点(x0,y0),去找在他前面的点中的横坐标小于x0的有几个。这个算法的正确性是无需置疑的,因为数据是以y为第一优先级,x为第二优先级给出来的。 那么,问题就是,怎么实现这个算法呢?观察到第二个重要原创 2016-08-16 15:16:08 · 325 阅读 · 0 评论 -
单调栈 51Nod1102
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102单调栈介绍http://blog.csdn.net/liujian20150808/article/details/50752861题解对于每一个小块,我们都可以去求如果最终高度就是这个小块高度,左右可以延伸到多远。 普通dp可以做,复杂度虽然我不会证明但原创 2017-07-24 23:33:50 · 382 阅读 · 0 评论