BZOJ 1109 [POI2007]堆积木Klo(树状数组)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1109
【题目大意】
Mary在她的生日礼物中有一些积木。那些积木都是相同大小的立方体。
每个积木上面都有一个数。Mary用他的所有积木垒了一个高塔。
妈妈告诉Mary游戏的目的是建一个塔,使得最多的积木在正确的位置。
一个上面写有数i的积木的正确位置是这个塔从下往上数第i个位置。
Mary决定从现有的高塔中移走一些,使得有最多的积木在正确的位置。
请你输出最优答案
【题解】
我们发现我们需要找到这样序列,i是递增的,a[i]也是递增的,
i-a[i]是非严格递增的,因为i=a[i]+(i-a[i]),
因此第一个递增条件是后面两个条件的必要不充分条件,
这样就是一个二维的LIS,我们按照其中一维排序,用树状数组维护另一维即可。
【代码】
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=100010;
struct data{int x,y;}p[N];
int c[N],n,x,cnt;
bool cmp(data a,data b){
if(a.x!=b.x)return a.x<b.x;
else return a.y<b.y;
}
void add(int x,int val){while(x<=n)c[x]=max(c[x],val),x+=x&-x;}
int query(int x){int s=0;while(x)s=max(s,c[x]),x-=x&-x;return s;}
int main(){
while(~scanf("%d",&n)){
int ans=cnt=0;
memset(c,0,sizeof(c));
for(int i=1;i<=n;i++){
scanf("%d",&x);
if(i-x>=0){p[cnt++]={i-x,x};}
}sort(p,p+cnt,cmp);
for(int i=0;i<cnt;i++){
int tmp=query(p[i].y-1)+1;
ans=max(ans,tmp);
add(p[i].y,tmp);
}printf("%d\n",ans);
}return 0;
}
BZOJ 1109 [POI2007]堆积木Klo(树状数组)的更多相关文章
- BZOJ 1109: [POI2007]堆积木Klo
1109: [POI2007]堆积木Klo Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 948 Solved: 341[Submit][Statu ...
- bzoj 1109 [POI2007]堆积木Klo(LIS)
[题意] n个数的序列,删除一个数后序列左移,求最后满足i==a[i]的最大个数. [思路] 设最终得到a[i]==i的序列为s,则s应满足: i<j,a[i]<a[j],i-a[i]&l ...
- BZOJ.1109.[POI2007]堆积木Klo(DP LIS)
BZOJ 二维\(DP\)显然.尝试换成一维,令\(f[i]\)表示,强制把\(i\)放到\(a_i\)位置去,现在能匹配的最多数目. 那么\(f[i]=\max\{f[j]\}+1\),其中\(j& ...
- BZOJ 1109 POI2007 堆积木Klo LIS
题目大意:给定一个序列,能够多次将某个位置的数删掉并将后面全部数向左串一位,要求操作后a[i]=i的数最多 首先我们如果最后a[i]=i的数的序列为S 那么S满足随着i递增,a[i]递增(相对位置不变 ...
- 1109: [POI2007]堆积木Klo
1109: [POI2007]堆积木Klo https://lydsy.com/JudgeOnline/problem.php?id=1109 分析: 首先是dp,f[i]表示到第i个的最优值,f[i ...
- BZOJ 1103 [POI2007]大都市meg(树状数组+dfs序)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1103 [题目大意] 给出一棵树,每条边的经过代价为1,现在告诉你有些路不需要代价了, ...
- 【BZOJ】1109: [POI2007]堆积木Klo
题意 \(n(1 \le n \le 100000)\)个数放在一排,可以一走一些数(后面的数向前移),要求最大化\(a_i=i\)的数目. 分析 分析容易得到一个dp方程. 题解 \(d(i)\)表 ...
- 【BZOJ1109】[POI2007]堆积木Klo 二维偏序
[BZOJ1109][POI2007]堆积木Klo Description Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体.每个积木上面都有一个数.Mary用他的所有积木垒了一个高塔 ...
- 【bzoj1109】[POI2007]堆积木Klo 动态规划+树状数组
题目描述 Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体.每个积木上面都有一个数.Mary用他的所有积木垒了一个高塔.妈妈告诉Mary游戏的目的是建一个塔,使得最多的积木在正确的位置 ...
随机推荐
- MongoDB 数据库(2)
db.collectionName 集合对象 获取集合对象 db.getCollection('collection_name') e.g. db.getCollection("class0 ...
- 边绘边理解prototype跟__proto__
网上流传着一张讲解prototype跟__proto__关系的图,尽管他已经描绘的很清楚了,但对于初学者来说,江太公感觉还是过于纠结,于是起心重绘,让他们之间的关系更加明晰可理解,一方面出于分享目的, ...
- Linux系统各发行版镜像下载(持续更新)
Linux系统各发行版镜像下载(持续更新) http://www.linuxidc.com/Linux/2007-09/7399.htm Linux系统各发行版镜像下载(2014年10月更新),如果直 ...
- selenium遇到的一些问题,持续更新
1.今天早上运行程序的时候,发现我在循环点击一个元素的时候出现了错误 selenium.common.exceptions.StaleElementReferenceException: Messag ...
- display:inline、block、inline-block三者之间的区别
1. display:block就是将元素显示为块级元素. block元素的特点: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度:(<d ...
- java的collection集合
# 原创,转载请先留言 1.集合的由来 数组的长度是固定的,当需要增加或减少元素时需要对数组重新定义,太麻烦了.java内部给我们提供了集合类,能存储任意对象,长度可以改变的,随着元素的增加而增加,随 ...
- tomcat修改内存
windows: 修改bin/catalina.bat, 第一行添加 set JAVA_OPTS=-Xms256m -Xmx512m linux: 修改bin/catalina.sh 第一行添加 JA ...
- MVC - 12.HtmlHelper
1.动态生成URL @Url.Action("Index3","Stu3") @Url.RouteUrl("Default2", new { ...
- git reset用法
git 删除 错误 提交的 commit 方法: 根据–soft –mixed –hard,会对working tree和index和HEAD进行重置: git reset -- ...
- 用ab进行POST,GET压力测试,且定义header及json的内容
这个以前没作过,找了文档.搞定. 要求时间的单curl测试的方式如下: time curl http://xxxxx/hq/restapi/isStart curl用来用post请求,且有header ...