离散化
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
bzoj4542 [HNOI2016]大数(莫队+离散化+数学)
首先有一个性质:如果A*10^k+B=B(mod p),且p和10^k互质,则A%p=0。那么,要判断一个s[l...r]是否是p的倍数,只要判断s[l...n]和s[r+1...n]在模n的意义下是否相等。于是,我们可以预处理出每一个后缀s[i...n]对p取模的结果a[i]。然后对于一个询问[l,r],就转化成了询问[l,r+1]中有多少对相同的a[i]。用莫队算法就可以解决了。当原创 2017-07-19 15:38:29 · 377 阅读 · 0 评论 -
loj6227「网络流 24 题」最长k可重线段集问题(类似loj6014 费用流)
这题好坑啊。(是我太菜了) 注意开区间这个问题。。。很玄学。。。看大佬的处理方式是把(x,y)变成(x*2+1,y*2)。我的强行理解是把原数轴上的每个点拆成两个,一个表示到这个点,一个表示从这个点开始。然后对于(x,x)这种开区间就可以变得合法了。要记得保证li< ri。这题还得开ll,sqrt(负数)会Tle.然后就基本和loj6014一样了,直接建图跑费用流即可。 然后,终于刷完网络流24原创 2017-12-18 11:04:48 · 398 阅读 · 0 评论 -
bzoj4636 蒟蒻的数列(离散化+线段树)
因为是只有最后询问一次和,所以可以离散化之后,区间更新最大值,线段树维护即可。叶子节点l表示[ a[l],a[l+1] )。答案就是每个点最后的值乘上这个点所代表的区间。原创 2017-10-20 16:29:10 · 566 阅读 · 0 评论 -
hdu5877 Weak Pair(dfs+线段树+离散化)
给定一棵有根树(注意跟不一定是1.。。),求有序对(u,v)满足的个数: 1.u是v的祖先 2.a[u]*a[v]<=k。 我们在对树进行dfs时,做到v点,此时在我们的dfs栈中的点正是v的祖先,一个不多,一个不少,我们只需在这些点中找到小于等于k/a[v]的点。显然可以把权值离散化了,用线段树来维护原创 2017-09-25 20:35:25 · 301 阅读 · 0 评论 -
bzoj1218 [HNOI2003]激光炸弹(二维前缀和+暴力/线段树+离散化+扫描线)
n=5000,暴力O(n^2)预处理二维前缀和,暴力O(n^2)枚举答案矩阵。 当然正解是O(nlogn)的线段树+扫描线+离散化的老套路。。详见poj2482原创 2017-09-24 16:13:46 · 410 阅读 · 0 评论 -
poj2482 Stars in Your Window(线段树+扫描线+离散化)
这题目好浪漫啊~~~~~~~~~~~~~ 说正事:对于每个点,我们把它变成一个范围,这个范围的意义是,只要矩形的右上角在这个范围内,这个点就可以被这个矩形覆盖。则这个范围显然就是(x,y,x+w-1,y+h-1)的一个矩形。现在我们的题目就变为:平面上有n个矩形,每个矩形内的点都有一个权值,可以互相叠加,问你权值最大的点是多少?我们可以用扫描线解决这个问题,按x排序,每次入边就是对区间[y1,y2原创 2017-09-24 19:59:31 · 414 阅读 · 0 评论 -
poj1151 Atlantis(线段树+扫描线+离散化,求矩形面积并)
写过的裸题,还敲了半天。。。太蒻原创 2017-09-23 19:31:01 · 333 阅读 · 0 评论 -
hdu1255 覆盖的面积(线段树+扫描线+离散化,求矩形面积并)
给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积。和周长并套路差不多。。甚至简单了些我觉得。重点是维护重复了两次以上的线段长度。分类讨论即可。 以coverlen[2]为例: 如果cover==0 则coverlen[2]利用子树的coverlen[2]来更新 如果cover==1 则coverlen[2]利用子树的coverlen[1]来更新 如果cover==2 则cover原创 2017-08-24 15:14:27 · 317 阅读 · 0 评论 -
poj1177[IOI1998]Picture (扫描线+离散化+线段树,求矩形周长并)
这人讲的很清楚了。我就再说一些细节。做了离散化之后时间和空间确实很优秀,但其实不做离散化也可以过。 扫描线这个算法,就是从左到右拿一根平行于y轴的线去扫描,遇到线段后进行处理,入边和出边。统计答案要注意。线段树负责维护的其实是一个线段覆盖的问题,我的每个节点表示的是一条线段,即a[l]a[r+1],所以我建树只建到m-1即可。复杂度应该是O(nlogn)O(nlogn)原创 2017-08-24 13:01:33 · 750 阅读 · 0 评论 -
ural1846 GCD2010(线段树+gcd+离散化)
单点修改,相同的数给一个位置,记录出现次数,删为0就改这个点的值为0,第一次出现就改这个点的值为val,因此要离散化,变成单点修改即可。 tips:unique返回值为重复元素的首地址,即不同的数的个数+1原创 2017-08-12 11:31:03 · 406 阅读 · 0 评论 -
bzoj1925 [Sdoi2010]地精部落(dp)
程序5分钟,思维两小时hh。 问题就是求长度为n的排列满足抖动序列的个数。我们首先要发现答案是具有对称性的,即如果存在一个排列满足答案且第一个数为山峰,则一定还存在一个排列满足答案且第一个数为山谷(把原排列中的每个数x都换成n+1-x即可),推广一下:如果存在一个长度为i的序列满足要求且第一个数为山峰的话,则一定还存在一个长度为i的序列满足要求且第一个数为山谷(把这i个数从小到大排列,分别为a[1原创 2017-08-16 14:54:54 · 365 阅读 · 0 评论 -
spoj_cot2 Count on a tree II(树上莫队+离散化)
题意:给两个点u,v,询问两点路径上有多少种不同的权值。树上莫队。然后权值要离散化。树上区间转移呢,基本就是这样的:记上次询问的两点为lastu,lastv,现在询问的两点为u,v,那么对于路径(lastu,u)上的所有点的存在性取反(就是原来答案里有就删掉,没有就加上),对于(lastv,v)同理。但是因为还有讨厌的lca的存在,所以我们一直都没把lca放在答案里。最后记答案时单独处理lca。具原创 2017-07-20 15:30:12 · 477 阅读 · 0 评论 -
bzoj3289 Mato的文件管理(树状数组求逆序对+莫队+离散化)
首先明确,求交换次数最小其实就是求逆序对的个数。可以用树状数组方便地进行求解。然后题目没说文件大小的范围,我们就赶紧怕怕的采取了离散化。我们还发现这题可以O(logn)的由[l,r]=>[l-1,r]等等。。所以,莫队,就是你啦!具体细节见代码。#include #include #include #include #include using namespace std;#def原创 2017-07-19 16:41:11 · 389 阅读 · 0 评论 -
bzoj4822 [Cqoi2017]老C的任务(离线+扫描线+离散化+树状数组/KD tree)
因为可以离线做,而且所有点一开始就给定,所以可以用扫描线+树状数组来做。如果强制在线,还可以用kd tree做。原创 2018-01-11 23:21:26 · 351 阅读 · 0 评论