题目链接:BZOJ - 3888 题目分析 首先,计算出每个线段在 x 坐标 0 处出现的时间开始点和结束点,就转成了时间轴上的线段. 然后就是看每条线段是否被 y 比它小的线段完全覆盖了.注意求出的时间点要离散化,然后应该使用时间轴上的区间来表示,两线段端点重合并不是有共同部分. 将所有线段按照 y 从小到大排序之后,使用线段树判断它覆盖的区间是否已经都被前面的线段覆盖了. 然后将它所覆盖的区间覆盖. 就这样的一道题我WA了7次,还有救吗.. 代码 #include <iostream> #…
[BZOJ 1483] [HNOI2009] 梦幻布丁 (线段树合并) 题面 N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. \(n,m\leq 1 \times 10^5\),颜色编号 \(\leq 1 \times 10^6\) 分析 先考虑询问,我们可以对每种颜色分别求出这种颜色的连续段有多少个.可以用权值线段树实现.第c棵权值线段树维护颜色c的位置出现情况,如果第i个位置颜色…
[BZOJ 2653] middle(可持久化线段树+二分答案) 题面 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整. 给你一个长度为n的序列s. 回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[c,d]之间的子序列中,最大的中位数. 其中a<b<c<d. 位置也从0开始标号. 强制在线. 分析 二分答案mid,表示询问的中位数在排过序的整个b序列中是第mid小. 考虑判断一个数是否<=序列的中位数:把大于等于这…
bzoj 1537: [POI2005]Aut- The Bus 先把坐标离散化 设f[i][j]表示从(1,1)走到(i,j)的最优解 这样直接dp::: f[i][j] = max{f[i-1][j] + f[i][j-1]} + w[i][j]就可以完美的MLE + TLE了 我们发现f[i][j]中,只有有权的点才有意义,但是我们只有10^5个有用的点,却考虑了10^5 * 10^5个点 所以我们只考虑有权的点,那么可以发现, f[i][j]的更新一定是由f(1,1)~(i,j)的最大值…
我们只要把每头牛开始遮挡视线和结束遮挡视线的时间点都搞出来就好= = 再按照y轴排序...然后变成线段覆盖了..线段树搞一下就好了? /************************************************************** Problem: 3888 User: rausen Language: C++ Result: Accepted Time:1204 ms Memory:22684 kb ********************************…
题目链接:BZOJ - 3196 题目分析 区间Kth和区间Rank用树状数组套线段树实现,区间前驱后继用线段树套set实现. 为了节省空间,需要离线,先离散化,这样需要的数组大小可以小一些,可以卡过128MB = = 嗯就是这样,代码长度= =我写了260行......Debug了n小时= = 代码 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #in…
BZOJ LOJ 洛谷 如果从\(1\)开始,把每个时间\(t_i\)减去\(i\),答案取决于\(\max\{t_i-i\}\).记取得最大值的位置是\(p\),答案是\(t_p+1+n-1-p=\max\{t_i-i\}+1+n-1\). 把环拆成链,每次询问就可以\(O(n)\)求了(滑动窗口). 考虑怎么维护答案:\(\min\limits_{i=1}^n\{\max\limits_{j=i}^{i+n-1}\{t_j-j\}+i\}+n-1\). 放宽一下条件,即\(Ans=\min\…
BZOJ 注意\(c\leq7\)→_→ 然后就是裸的权值线段树+线段树合并了. 对于取\(\max/\min\)操作可以直接区间修改清空超出范围的值,然后更新到对应位置上就行了(比如对\(v\)取\(\max\),把\(\lt v\)的数全删掉,统计一下个数\(num\),然后在\(v\)处加上\(num\)个\(v\)即可). 值域很大,直接维护区间乘积会炸,只能取对数. 最好还是先离散化一下. 复杂度\(O(m\log V)\). 注意线段树合并Merge的时候不要写Update/Push…
BZOJ LOJ 令\(f[i][j]\)表示以\(i\)为根的子树,权值\(j\)作为根节点的概率. 设\(i\)的两棵子树分别为\(x,y\),记\(p_a\)表示\(f[x][a]\),\(p_a'\)表示\(f[y][a]\),\(P_i\)表示给定的\(i\)取最大值作为权值的概率. 转移就是两棵树之间的权值组合,即以\(x\)子树中的\(a\)作为最小值的概率为\(p_a\times\sum\limits_{v>a}p_v'\times(1-P_i)\),以\(x\)子树中的\(a\…
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemCode=3888 Twelves Monkeys Time Limit: 5 Seconds      Memory Limit: 32768 KB James Cole is a convicted criminal living beneath a post-apocalyptic Philadelphia. Many years ago, the Earth's sur…