zoj 3511 Cake Robbery(线段树)】的更多相关文章

problemCode=3511" target="_blank" style="">题目链接:zoj 3511 Cake Robbery 题目大意:就是有一个N边形的蛋糕.切M刀,从中挑选一块边数最多的.保证没有两条边重叠. 解题思路:有多少个顶点即为有多少条边,所以直接依照切刀切掉点的个数排序,然后用线段树维护剩下的还有哪些点. #include <cstdio> #include <cstring> #include &…
给这个题目跪了两天了,想吐简直 发现自己离散化没学好 包括前一个离散化的题目,实际上是错了,我看了sha崽的博客后才知道,POJ那题简直数据弱爆了,本来随便一组就能让我WA掉的,原因在于离散化的时候,缩小数据规模的同时,没有考虑到误差,比如 1 4 6 8,离散化之后是1 2 3 4,我如果覆盖了1 2和3 4,表面上好像全部覆盖了,实际数据并没有覆盖..所以我只能说那道题目我其实错了,并没有真正做出离散化出来...现在用这道题来弥补. color the ball,ball的编号可以从1 到2…
求上升子序列的最大和.O(n^2)会暴力,在查询的时候要用线段树维护 因为权值是浮点数,故先离散化一下,设第 i 个位置的权值,从小到大排名为 id.那么dp转移中 \[d[i] = max(d[i],d[i] + d[j])\] 其中\[j<i \& id[j]<id[i]\] 故线段树结点区间[l,r]维护的是id = l 到 id = j 中的最大 dp值 #include <bits/stdc++.h> using namespace std; const int…
思路:自己写的第二发二维线段树1A.哈哈,看来对二维的push操作比較了解了:可是还没遇到在两个线段树中同一时候进行push操作的,事实上这题我是想在x维和y维同一时候进行push操作的.可是想了好久不会.然后看到这题又给出10秒,然后想想在x维线段直接单点查询肯定也过了,然后在第二维就仅仅有pushup操作.在第一维线段树没有pushup操作.要是在第一维也有pushup操作的话.那就不用单点查询那么慢了. 只是也A了,想找题即在二维同一时候进行pushup和pushdown操作的. #inc…
题意: n个蛋糕编号从小到大编号,j号蛋糕可以放在i号上面,当且仅当j的体积严格大于i且i<j,问最终可得的最大蛋糕体积. 分析: 实质为求最长上升子序列问题,设dp[i]从头开始到第i位的最长子序列长度,可以想到O(n2)的做法,状态转移方程: dp[i] = max(dp[j], j >= 0 && j < i && v[j] < v[i]) + v[i]; 但是n可达1e5,这样做会超时... 那么如何快速的获取满足v[j]小于v[i]的最大的…
题意:0~n-1的数组,初始值为0:执行m个操作,每次操作执行后输出当前值为0的连续段的段数. 操作1: p i j : i~j区间的每个元素值减1 操作2: r i j :i~j区间的每个元素值加1,每个r操作之前,一定有个相应的p操作 数据范围:1 <= n <= 108, 0 <= m <= 20000 线段树现在已经成了竞赛选手的基本功,但是我这块好弱,写下这个题解,方便自己以后复习. 分析,这很明显是个用线段树来解的题,但是数据范围太大.注意到操作次数最多只有20000次…
卖切糕的小女孩 http://www.cnblogs.com/wuyiqi/archive/2012/04/28/2474672.html #include <cstdio> #include <cstring> #include <algorithm> #define lson l, m, rt << 1 #define rson m+1, r, rt << 1 | 1 #define lc rt << 1 #define rc r…
题意:已知n个矩阵(下标从1开始),求下标x~y区间矩阵的乘积.最多m次询问,n ( 1 <= n <= 30,000) and m ( 1 <= m <= 30,000). 分析: 1.矩阵初始化为单位矩阵,因为要做乘积,E*A=A. 2.因为输出矩阵的所有值范围在0~r-1,所以要对r取余. #pragma comment(linker, "/STACK:102400000, 102400000") #include<cstdio> #inclu…
题目链接 题意 : 一根木棍,长8000,然后分别在不同的区间涂上不同的颜色,问你最后能够看到多少颜色,然后每个颜色有多少段,颜色大小从头到尾输出. 思路 :线段树区间更新一下,然后标记一下,最后从头输出. //ZOJ 1610 #include <cstdio> #include <cstring> #include <iostream> using namespace std ; *],lz[*] ,hashh[*],hash1[*]; //void pushup(…
ZOJ 3597 题意是说有n把枪,有m个靶子,每把枪只有一发子弹(也就是说一把枪最多只能打一个靶子), 告诉你第 i 把枪可以打到第j个靶, 现在等概率的出现一个连续的P把枪,在知道这P把枪之后,你被允许选择一个连续的Q个靶子,使得这P把枪所打到的靶子的数目最多,问打到的靶子数目的期望值是多少. 这题通过简单的转化就可以转换成为另一个模型: 如果第a把枪可以打到第b个靶子,那么将其视为二位平面上的一个点(b, a), 问题转化为一个Q * P的矩形最多可以覆盖多少个点.只是有一点需要注意的就是…