首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
BZOJ 1109 POI2007 堆积木Klo LIS
】的更多相关文章
BZOJ 1109 POI2007 堆积木Klo LIS
题目大意:给定一个序列,能够多次将某个位置的数删掉并将后面全部数向左串一位,要求操作后a[i]=i的数最多 首先我们如果最后a[i]=i的数的序列为S 那么S满足随着i递增,a[i]递增(相对位置不变),i-a[i]单调不减(后面的不会比前面移动的少) 这是一个三维偏序问题 要是不看题解我就真去写CDQ分治了233 我们发现i=(i-a[i])+a[i] 也就是说假设一个序列满足i-a[i]单调不减且a[i]单调递增 那么i一定单调递增 于是就剩两维偏序了 LIS走起吧= = #include…
BZOJ 1109: [POI2007]堆积木Klo
1109: [POI2007]堆积木Klo Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 948 Solved: 341[Submit][Status][Discuss] Description Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体.每个积木上面都有一个数.Mary用他的所有积木垒了一个高塔.妈妈告诉Mary游戏的目的是建一个塔,使得最多的积木在正确的位置.一个上面写有数i的积木的正确位置是这个塔从下往上数第i个位置…
bzoj 1109 [POI2007]堆积木Klo(LIS)
[题意] n个数的序列,删除一个数后序列左移,求最后满足i==a[i]的最大个数. [思路] 设最终得到a[i]==i的序列为s,则s应满足: i<j,a[i]<a[j],i-a[i]<=j-a[j] 最后一项代表后边的移动距离不少于前边的. 因为i=i-a[i]+a[i] 所以只要满足i-a[i]单调不减,a[i]单调递增则i一定递增. 则问题转化为一个二维偏序问题,O(nlogn)求LIS.用个BIT即可. [代码] #include<cstdio> #include&l…
BZOJ.1109.[POI2007]堆积木Klo(DP LIS)
BZOJ 二维\(DP\)显然.尝试换成一维,令\(f[i]\)表示,强制把\(i\)放到\(a_i\)位置去,现在能匹配的最多数目. 那么\(f[i]=\max\{f[j]\}+1\),其中\(j<i,\ a_j<a_i,\ j-a_j\leq i-a_i\).就是三维偏序,可以\(CDQ\). 这三个不等式很相似,再观察一下,发现由\(a_i>a_j,\ i-a_i\geq j-a_j\)就可以推出\(i>j\). 所以只要满足两个条件就可以了,即二维偏序. 同时转移比较特殊,…
BZOJ 1109 [POI2007]堆积木Klo(树状数组)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1109 [题目大意] Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体. 每个积木上面都有一个数.Mary用他的所有积木垒了一个高塔. 妈妈告诉Mary游戏的目的是建一个塔,使得最多的积木在正确的位置. 一个上面写有数i的积木的正确位置是这个塔从下往上数第i个位置. Mary决定从现有的高塔中移走一些,使得有最多的积木在正确的位置. 请你输出最优答案 [题解] 我们发现…
1109: [POI2007]堆积木Klo
1109: [POI2007]堆积木Klo https://lydsy.com/JudgeOnline/problem.php?id=1109 分析: 首先是dp,f[i]表示到第i个的最优值,f[i]=f[j]+1,(j<i,a[j]<a[i],j-a[j]<i-a[i]),三维偏序,可以cdq+线段树转移.实际上由a[j]<a[i]和j-a[j]<i-a[i]可以推出j<i所以二维偏序,直接LIS. 代码: #include<cstdio> #inclu…
【BZOJ】1109: [POI2007]堆积木Klo
题意 \(n(1 \le n \le 100000)\)个数放在一排,可以一走一些数(后面的数向前移),要求最大化\(a_i=i\)的数目. 分析 分析容易得到一个dp方程. 题解 \(d(i)\)表示前\(i\)个数且第\(i\)个数放在\(a_i\)位置的最大答案,则\(d(i) = max(d(j)+1) (j < i, a_j < a_i, j - a_j \le i-a_i)\),发现是一个三维偏序.然而这个三维偏序是可以变成二维偏序的. 由于\(j-a_j \le i-a_i, a…
【BZOJ1109】[POI2007]堆积木Klo 二维偏序
[BZOJ1109][POI2007]堆积木Klo Description Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体.每个积木上面都有一个数.Mary用他的所有积木垒了一个高塔.妈妈告诉Mary游戏的目的是建一个塔,使得最多的积木在正确的位置.一个上面写有数i的积木的正确位置是这个塔从下往上数第i个位置.Mary决定从现有的高塔中移走一些,使得有最多的积木在正确的位置.请你告诉Mary她应该移走哪些积木. Input 第一行为一个数n,表示高塔的初始高度.第二行包含n个数…
BZOJ1109 : [POI2007]堆积木Klo
f[i]表示第i个在自己位置上的最大值 则f[i]=max(f[j])+1 其中 j<i a[j]<a[i] a[i]-a[j]<=i-j -> j-a[j]<=i-a[i] i-a[i]>=0 j-a[j]>=0 发现后两项可以推出第一项,所以是一个LIS问题,排序后树状数组优化DP即可,时间复杂度$O(n\log n)$. #include<cstdio> #include<algorithm> #define N 100010 int…
【bzoj1109】[POI2007]堆积木Klo 动态规划+树状数组
题目描述 Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体.每个积木上面都有一个数.Mary用他的所有积木垒了一个高塔.妈妈告诉Mary游戏的目的是建一个塔,使得最多的积木在正确的位置.一个上面写有数i的积木的正确位置是这个塔从下往上数第i个位置.Mary决定从现有的高塔中移走一些,使得有最多的积木在正确的位置.请你告诉Mary她应该移走哪些积木. 输入 第一行为一个数n,表示高塔的初始高度.第二行包含n个数a1,a2,...,an,表示从下到上每个积木上面的数. 输出 注意:请…