随笔分类 -  数据结构之分块

摘要:tle了好几天= =提交20+次,我都怕cf说我恶意卡测评。。。 题意:一个数组,两种操作,一种l到r加一个值,还有一种查询整个数组里距离最远的某个数的距离 题解:分块,用vector+lowbound,加法用lazy标记,查询用lowbound,复杂度O(n*sqrt(n)*log(sqrt(n) 阅读全文
posted @ 2017-10-16 15:56 walfy 阅读(318) 评论(0) 推荐(0) 编辑
摘要:。。wa了一整天,,,死都找不出bug,后来把x-=l[idx],y-=l[idy]就过了= = 还是分块,用双端队列+数组(map可能会爆内存)维护,每次更新只需要更新两端的队列值和数组里存的值,查询直接暴力查询每个块复杂度O(n*sqrt(n)) #include<bits/stdc++.h> 阅读全文
posted @ 2017-10-12 20:42 walfy 阅读(186) 评论(0) 推荐(0) 编辑
摘要:和上一题差不多,就只查询了次数,不用输出跳出前的最后一位 #include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define pii pair<int 阅读全文
posted @ 2017-10-12 09:14 walfy 阅读(173) 评论(0) 推荐(0) 编辑
摘要:给一个数组,有两种操作,一种是将a位数改成b,一种是判断从a点跳几次能跳出数组,每次跳从a到x【a】+a 题解:用两个数组记录,每次点跳出下一个块 的次数,和跳到下一个块 的位置,用块来不断更新,查找的时候直接暴力跳每一个块,到最后一个块就挨个跳, #include<bits/stdc++.h> # 阅读全文
posted @ 2017-10-12 09:13 walfy 阅读(222) 评论(0) 推荐(0) 编辑
摘要:先对b从小到大sort,判断b是不是比sqrt(n)大,是的话就直接暴力,不是的话就用dp维护一下 dp【i】表示以nb为等差,i为起点的答案,可以节省nb相同的情况 #include<bits/stdc++.h> #define fi first #define se second #define 阅读全文
posted @ 2017-10-10 17:00 walfy 阅读(157) 评论(0) 推荐(0) 编辑
摘要:分块,在每一块中保存可见的斜率(从左边起点开始递增),对于整个数组,第k个块的最后一个可见块必须比第k+1个块的第一个可见块小 对于分块,复杂度为O(sqrt(n)) #include<bits/stdc++.h> #define fi first #define se second #define 阅读全文
posted @ 2017-10-10 12:50 walfy 阅读(134) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示