
区间
f_zyj
一个追逐蝴蝶的人!
展开
-
NYOJ-12-喷水装置(二)
描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿。请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿。 输入 第一行输入一个正整数N表示共有n次测试数据。 每一组测试数据的第一行有三个整数n,w,h,n表示共有n个喷水装置,w表示草坪的横向长度,h表示草坪的纵原创 2016-05-16 00:57:57 · 594 阅读 · 0 评论 -
51Nod-1686-第K大区间
ACM模版描述题解十分有意思的二分,二分第k大的数是多少,设为mid,然后cala(mid),只要计算出有多少个区间的众数的次数是>= mid的即可。使用尺取法+二分可以实现O(nlogn)复杂度的算法。这里有一个暗藏的坑,k <= n * (n - 1) / 2,说明区间的宽度最少为2,写mul(x)函数时注意即可。代码#include <cstring>#include <iostream>原创 2016-10-06 00:28:37 · 1498 阅读 · 0 评论 -
51Nod-1712-区间求和
ACM模版描述题解做这道题明显感觉智商不够用,只能说略懂略懂……套路太深,数论有些差了/(ㄒoㄒ)/~~不是看了大牛们的详解我断然无法弄懂这道题。以下是官方题解: 对于一段区间l~r,其中一个数x对答案的贡献为(2x-l-r)次。 因此我们只要求出所有数对答案的贡献并累加起来即可。 将2x-l-r分为两部分,一部分为求2x的和,即为x左边与x右边相同的数的对数。 另一部分为l+r,将其拆开来原创 2016-12-15 22:40:59 · 975 阅读 · 1 评论 -
51Nod-1674-区间的价值 V2
ACM模版描述题解虽然是四级题,但是真不会,找了题解,甚是不错。以下题解来自abclzr的博客:对区间分治,统计[l, r]中经过mid的区间的答案。 我的做法是从mid向右扫到r,统计出所有[mid, i], mid ≤ i ≤ r的and和or值。 然后发现这些and和or值有很多相同的,把相同的压在一起并记录sum,再从mid - 1扫到l并暴力从mid向右统计答案。 事实上因为[mid原创 2016-12-26 20:04:33 · 846 阅读 · 0 评论 -
河南第十届ACM省赛-D-年终奖金
ACM模版描述题解早两天我就已经补完题了,但是一直无法上传图片,所以就一直没有写题解,谁知道今天才发现,由于我是从照片上截的图,导致图片过大而且 优快云 系统问题,给我提示了系统维护的信息,误导了我。于是将图片发给另一个QQ号又重新发给自己,压缩了一下,总算是可以了。以上全是废话……这个问题是一个区间 dp 的问题,我们需要先对序列进行排序,然后规划就好了,dp[i][j] 表示从 i 到 j 的原创 2017-05-12 12:46:44 · 1252 阅读 · 0 评论 -
ZOJ-The 14th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple-D
ACM模版描述题解离散化找公共区间,然后对区间进行一定规则的累加就行了。 具体规则就看翻译了,能翻译对,就 AC,翻译不对,就可以洗洗碎了……还好猜样例猜到了规则!哎,英语渣渣打比赛真是累~~~全靠猜!对了,这个题的数据有些迷,题目说好了 1≤x,y≤1001 ≤ x, y ≤ 100,我开了 MAXN=110MAXN = 110 却 WA 了,开到200才 AC!!!痛心疾首啊,难道又是我翻译出原创 2017-04-23 23:48:21 · 701 阅读 · 0 评论 -
EOJ-大学生程序设计邀请赛(华东师范大学)-D-实验室传染病
ACM模版描述题解单调栈搞搞,不断更新左右区间,直到无法更新为止,在 51Nod 上见过一道类似的问题,不过那道题只需要一遍(update() + update_())即可解决,而这个问题涉及到两个更新函数可能会互相影响彼此,所以需要多次更新,直到无法更新为止。具体是哪道题我就记不大清楚了……代码#include <iostream>#include <algorithm>#include <s原创 2017-05-16 00:18:56 · 709 阅读 · 0 评论 -
51Nod-1572-宝岛地图
ACM模版描述 题解这个问题一开始我选择暴力,结果 TLE 了,然后各种优化,考虑到很多位置是重复判断的,所以我选择将所有可能会路过的相对坐标存在 set 中,结果依然是 TLE 了两组,虽然时间上快了很多,但是依然无法避免的超时了(代码 One)。然后,发现自己虽然在不断地优化,但是始终没有摆脱暴力的思路,这里应该将有障碍的地方全部设置为 1,然后求前缀和,因为如果我们一步一步的去判断肯定会超时原创 2017-05-17 14:18:08 · 720 阅读 · 0 评论 -
CF-Tinkoff Challenge-Elimination Round-C-Mice problem
ACM模版描述 题解当时做这个题没有完全看清楚题,strictly,严格的,严格处于捕鼠器中,所以只出现在边上是不对的。这里我们可以在线处理,一边读入,一边缩小时间区间,最后输出时间左区间即可,也就是最少时间,如果中间就能判断输出-1,那就输出-1结束吧。这里我们需要注意一个问题,既然严格在捕鼠器内,那么最后的时间区间一定是刚好有鼠在边界上的,那么我们为什么输出左区间就可以了呢?这是因为这个题是存原创 2017-04-27 22:44:10 · 514 阅读 · 0 评论 -
蓝桥-ALGO-29-校门外的树
ACM模版描述题解区间合并问题。水题……代码#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const int MAXN = 111;const int INF = 0x3f3f3f3f;struct interval{ int l, r;} Itv[MAXN];int L, M原创 2017-06-05 04:33:58 · 318 阅读 · 0 评论 -
51Nod-1495-中国好区间
ACM模版描述题解这个题真的很让人出乎意料……没成想,1e7 的数据酱紫搞竟然能在 0.7s 内搞定。首先,我们暴力获得数组 a[]a[],然后使用尺取法,先获取一个满足题意的 l = 1, r = ?, cnt = kl\ =\ 1,\ r\ =\ ?,\ cnt\ =\ k 的区间,接着呢,很明显只要右区间大于 rr 都是好区间,然后尺取法往后继续查找刚好满足 l = ?, r = ?, cnt原创 2017-07-03 23:26:09 · 369 阅读 · 0 评论 -
51Nod-1564-区间的价值
ACM模版描述题解这个题很有意思,输入专门强调是随机生成的,所以不存在比较卡的数据,酱紫的话,也就是可以使用分治搞搞,当然这个方法不是最好的,但是是最简单的,在此基础上,还可以进行数据结构上的优化,使区间查询最值的过程更优,酱紫就会想起来线段树、树状数组、RMQ 之类的东西,可能用单调栈也能搞吧~~~还好,裸数据结构就能险过,偷个懒,就不用高级数据结构优化了……GG!代码#include <iost原创 2017-06-14 00:55:49 · 805 阅读 · 0 评论 -
HDU-2017 多校训练赛6-1008-Kirinriki
ACM模版描述题解这个题要难为死我了,搞半天也不知道怎么做……首先我们可以假设 AA 一定在 BB 左边,然后我们可以考虑 AA 的尾部和 BB 的起点,如果暂时不考虑长度不固定,我们每次查找都让长度尽可能长,那么,我们一定需要将 AA 的尾部或者 BB 的起点靠近,然后获取 AA 向左延伸,BB 向右延伸对应位置的贡献,然后呢?我们可以采用尺取法来进行 AA 的尾部和 BB 的起点向两侧的推移,当原创 2017-08-10 17:20:11 · 629 阅读 · 7 评论 -
51Nod-1480-打广告
ACM模版描述题解贪心,没什么难的,就是尽可能的匹配到覆盖率高的区间。先对广告进行排序,按照左端点从小到大,右端点从大到小的主次关系来排序,这时,排好的序列中右端点的图像是锯齿形的,我们只取一个单调递增的子序列进行匹配,因为这样我们就能匹配到最大的区间。然后呢,我们根据每一个频道的需求,查找小于 ajaj 的第一个区间位置(二分),然后遍历其后紧挨着的合法的区间,求最值即可。这个题不难,就是题目读起原创 2017-08-04 16:16:41 · 359 阅读 · 0 评论 -
HDU-2017"百度之星"程序设计大赛-初赛(B)-1006-小小粉丝度度熊
ACM模版描述题解签到题,应该算是贪心吧……看看代码吧,说起来比较麻烦。代码#include <cstdio>#include <algorithm>#include <iostream>using namespace std;typedef long long ll;const int MAXN = 1e5 + 5;int n, m;ll C[MAXN];struct node{原创 2017-08-13 16:37:24 · 1147 阅读 · 0 评论 -
51Nod-1671-货物运输
ACM模版描述题解官方题解:首先我们需要注意到最重要的一点,所有运输方案同时进行,我们只需要计算最后到达的方案的花费时间的最小值。所以我们需要考虑的是一个极限情况,在这个极限情况下,其他运输方案全部是在允许范围内的。所以我们可以二分枚举这个极限情况,判断所有方案是否都在这个极限内,在的话就继续缩小极限,不在的话就放大极限。至于这个极限呢,涉及到传送门的位置,我们可以将传送门的位置标记为两个区间,初始原创 2017-09-23 15:29:00 · 1088 阅读 · 1 评论 -
HDU-6004-Periodical Cicadas
ACM模版描述题解在 n∗mn * m 的区域中,有 n∗mn * m 种知了,给出每种知了第一次出现的年数 ss 和周期性 zz,然后询问 (x1,y1)(x_1, y_1) 和 (x2,y2)(x_2, y_2) 为对角线顶点的矩形区域中,所有种类知了同时出现的年份。这里要求矩形区域中所有知了第一次同时出现的年数,我们可以先从两只知了考虑,设甲第一次出现、甲出现周期、甲出现的次数、甲出现的年数、原创 2017-11-19 14:56:52 · 619 阅读 · 0 评论 -
HDU-3183-A Magic Lamp
ACM模版描述题解可以用RMQ搞搞,这里需要说的是,给了一个n位数,去掉m位数,那么可以肯定的是1到m+1区间中最小的数必定是第一位,记第一位数位为pos(第一步),那么pos+1到m+2中的最小的数必定是第二个数字(第二步),以此类推,贪心查找。这也很好理解的,因为最极端的可能就是,第一步,m+1后的几位全部是留下来的,第二步,m+2后的几位全部是留下来的……这里使用RMQ也行,不使用直接贪心也行原创 2016-11-08 01:21:26 · 358 阅读 · 0 评论 -
51Nod-1521-一维战舰
ACM模版描述题解好长时间没有见过51更新4级以下的题了,今天多了一道从CF上抓来的题,很有趣,区间问题,对于我这种做题少的人来说是一种区间新题型。比较简单的是直接上STL的set,用二分搞搞(代码One)。但是这个耗时贼高,于是发现这道题不用set和二分也是完全可以的(代码Two),利用一维数组从某一出发点向两边查找,其实问题的关键是如何求一段区间能放下多少艘战舰,很明显: num = (le原创 2016-10-17 19:56:10 · 1570 阅读 · 0 评论 -
NYOJ-14-会场安排问题
描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。 输入 第一行是一个整型数m(m<100)表示共有m组测试数据。 每组测试数据的第一行是一个整数n(1 < n < 10000)表示该测试数据共有n个活原创 2016-05-16 02:21:48 · 700 阅读 · 0 评论 -
NYOJ-6-喷水装置(一)
描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0 < Ri < 15)的圆被湿润,这有充足的喷水装置i(1 < i < 600)个,并且一定能把草坪全部湿润,你要做的是:选择尽量少的喷水装置,把整个草坪的全部湿润。输入 第一行m表示有m组测试数据 每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置原创 2016-05-11 01:40:58 · 499 阅读 · 0 评论 -
HDU-5701-中位数计数
Problem Description中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数。 现在有n个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数。Input 多组测试数据 第一行一个数n(n≤8000) 第二行n个数,0≤每个数≤10^9,Output N个数,依次表示第i个数在多少包含其的区间中是中位数。S原创 2016-06-01 16:46:52 · 544 阅读 · 0 评论 -
CF-Educational Codeforces Round 15-A-Maximum Increase
ACM模版描述题解输入过程中不断和前边的对比,获取每一个递增子数组的长度,留下最长即可。代码#include <iostream>#include <cstdio>using namespace std;const int MAXN = 1e5 + 5;int a[MAXN];int main(int argc, const char * argv[]){ int n; cin原创 2016-07-30 00:29:49 · 337 阅读 · 0 评论 -
51Nod-1133-不重叠的线段
ACM模版描述题解对线段的右端进行排列,然后贪心查找就可以了,很水。代码#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int MAXN = 1e4 + 5;struct line{ int x, y;} L[MAXN];bool cmp(line a, line b)原创 2016-08-03 16:33:55 · 383 阅读 · 0 评论 -
51Nod-1278-相离的圆
ACM模版描述题解将圆的问题转化为线段问题,按线段左端排序后,二分查找即可。 还有一种比较巧妙的办法是,将所有的线段的起点和终点存入一个数组中,然后排序,初始化num=圆的个数(线段条数),sum=0,然后从头开始遍历,遇见起点则num–,遇到终点则sum+=num。代码#include <iostream>#include <cstdio>#include <algorithm>using原创 2016-08-03 21:43:59 · 816 阅读 · 0 评论 -
51Nod-1428-活动安排问题
ACM模版描述题解将所有开始时间和结束时间存入一个数组内,然后排序,最后从头至尾遍历,初始化flag=0,遇见开始时间则flag++,反之则更新res并flag--。代码#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const int MAXN = 1e4 + 10;struct party原创 2016-08-04 13:14:47 · 404 阅读 · 0 评论 -
51Nod-1094-和为k的连续区间
ACM模版描述题解求前N项和存储起来,然后前后相减与K对比,水题……代码#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int MAXN = 1e4 + 10;int A[MAXN];int sum[MAXN];int main(int argc, const char * argv原创 2016-08-02 21:00:32 · 1096 阅读 · 0 评论 -
51Nod-1127-最短的包含字符串
ACM模版描述题解尺取法,复杂度O(n)。代码#include <iostream>#include <string>using namespace std;const int INF = 0x3f3f3f3f;int flag[27] = {0};string S;int main(int argc, const char * argv[]){ cin >> S; int an原创 2016-08-08 00:51:09 · 859 阅读 · 5 评论 -
51Nod-1672-区间交
ACM模版描述题解首先排序右端点从小到大,然后枚举右端点(保证所枚举的那个端点最少有k个区间可以覆盖)作为所求的交区间的右端点,这时候需要求出交区间的左端点,我们可以知道,右端点确定下,如果左端点越靠左,这个区间的范围约大。为了保证所交区间有k个,我们需要找到第k小的左端点,为了保证我枚举的右端点肯定是交区间的右端点,我们必须边枚举,边单点更新左端点。具体的代码实现还是有很多需要注意的地方(注释写得原创 2016-08-08 17:50:55 · 1097 阅读 · 0 评论 -
51Nod-1272-最大距离
ACM模版描述题解方法有很多种,这里介绍两种写法。 第一种比较容易想到的写法是将键值和下标封装在结构体中进行排序,然后从尾部检索一遍即可,复杂度O(nlogn)。 第二种是使用单调栈优化,可以使复杂度低至O(n)。代码One:#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const in原创 2016-08-11 17:40:06 · 599 阅读 · 3 评论 -
51Nod-1285-山峰和分段
ACM模版描述题解这里需要强调的是,峰如果被分割,依然算峰,所以,首先需要对点数据进行峰数据检索,然后处理得到一个pre数组用来存储前i个点数据中有几个峰。当然,我们最多分的段数受峰个数控制。代码#include <iostream>#include <cstdio>using namespace std;const int MAXN = 5e4 + 10;// const int INF =原创 2016-08-11 23:52:34 · 749 阅读 · 0 评论 -
51Nod-1402-最大值
ACM模版描述题解一开始看到这道题,感觉挺简单的,但是,我只关注了明沟,却忽略了暗坑!!! 首先,这里我们将这些特殊点成为卡点,但是不是所有的卡点都能卡住数据的,其中,最容易想到的是t < x - 1的点是无法卡住数据的,所以我们可以直接忽略掉,那么剩下的卡点一定是可以卡住数据的,但是这时候筛选出来的卡点其中有两种情况并无法精准的卡住数据,即: T[i] > T[i - 1] + X[i] -原创 2016-08-13 01:01:45 · 468 阅读 · 0 评论 -
51Nod-1484-猜数游戏
ACM模版描述 题解算法思路很容易想,就是区间交和区间并问题,然而我却坑死在了迭代器的陷阱上!!!这里出现的问题主要是迭代器的陷阱——迭代器失效。如果用迭代器删除指定位置的元素,那么该操作返回的是一个迭代器,并且此迭代器指向删除元素的下一个元素;如果是删除某范围内的元素时,返回值也是一个迭代器,指向最后一个被删除元素的下一个元素。代码#include <iostream>#include <al原创 2016-09-27 21:01:14 · 731 阅读 · 0 评论 -
HDU-3486-Interviewe
ACM模版描述题解给定n个数,分为m个区间,保证m个区间的元素数目都是一样并且尽可能多,剩余的无法均分的则舍去,忽略。网上见到很多人这道题都是二分+RMQ写得,但是,实际上是有问题的,因为并不是段数越多,值就越大,比如说:3 4 55 55 2 3,如果分为三段,结果4+55+3=62,而如果分为两段,55+55=110了,所以说这道题需要枚举+RMQ,可是这里如果不剪枝会特别悬,很有可能TLE,这原创 2016-11-07 19:57:01 · 763 阅读 · 0 评论 -
HDU-2888-Check Corners
ACM模版描述题解二维RMQ,给定一个n*m矩阵,q次询问,每个询问给出一个子矩阵的左上角和右下角坐标,要求出这个子矩阵中的最大元素然后输出,并且,这个最大元素和子矩阵四角对比,只要和其中一个元素相等,就输出yes,否则输出no。代码#include <iostream>using namespace std;/* * 二维RMQ,预处理复杂度 n*m*log*(n)*log(m) * 数组原创 2016-11-07 23:24:26 · 343 阅读 · 0 评论 -
51Nod-1981-如何愉快地与STL玩耍
ACM模版描述题解线段树 + bitsetbitset + 二分 + 输入外挂 + 输出外挂 + Visual C++\text{Visual C++}……运气好可以卡过!代码#include #include #include #include using namespace std;const int MAXN = 65540;const原创 2018-01-05 19:15:14 · 1060 阅读 · 3 评论