BZOJ 1109: [POI2007]堆积木Klo
1109: [POI2007]堆积木Klo
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 948 Solved: 341
[Submit][Status][Discuss]
Description
Mary在她的生日礼物中有一些积木。那些积木都是相同大小的立方体。每个积木上面都有一个数。Mary用他的
所有积木垒了一个高塔。妈妈告诉Mary游戏的目的是建一个塔,使得最多的积木在正确的位置。一个上面写有数i
的积木的正确位置是这个塔从下往上数第i个位置。Mary决定从现有的高塔中移走一些,使得有最多的积木在正确
的位置。请你告诉Mary她应该移走哪些积木。
Input
第一行为一个数n,表示高塔的初始高度。第二行包含n个数a1,a2,...,an,表示从下到上每个积木上面的数。
(1<=n<=100000,1<=ai<=1000000)。
Output
注意:请输出最多有多少点可以处在正确位置
Sample Input
1 1 2 5 4
Sample Output
HINT

Source
分析
OTZ Neighthorn
一开始是三维——
i > j && a[i] > a[j] && a[i] - i <= a[j] - j
然后,巨机的Neighthorn告诉我们,这其实是二维,因为满足后两个条件时,第一维一定满足。
所以是二维了——
a[i] > a[j] && a[i] - i <= a[j] - j
然而蒟蒻的我依然不会,于是巨机的Neighthorn有开始指点迷津。
说,如果你把a[i]看作新的下标,这就是个水水的最长不严格上升子序列问题。
∑( 口 ||, 再次 OTZ Neighthorn。
代码
#include <cstdio>
#include <cstring>
#include <algorithm> #define lim 10000000 class Scanner
{
private:
char *c; public:
Scanner(void)
{
c = new char[lim];
fread(c, , lim, stdin);
} int nextInt(void)
{
int res = ;
bool neg = ; while (*c < '')
if (*c++ == '-')
neg ^= true; while (*c >= '')
res = res* + *c++ - ''; return neg ? -res : res;
}
}in; #define N 1000005 int n, a[N]; struct pair
{
int x, y;
pair(void) {};
pair(int a, int b) :
x(a), y(b) {};
}; pair p[N]; int cmp(const void *a, const void *b)
{
if (((pair *)a)->x != ((pair *)b)->x)
return ((pair *)a)->x - ((pair *)b)->x;
else return -((pair *)a)->y + ((pair *)b)->y;
} int tmp[N]; #define inf 0x3f3f3f3f
#define low lower_bound
#define upp upper_bound signed main(void)
{
n = in.nextInt(); for (int i = ; i <= n; ++i)
a[i] = in.nextInt(); for (int i = ; i <= n; ++i)if (a[i] <= i)
p[i] = pair(a[i], i - a[i]);
else p[i] = pair(inf, inf); qsort(p + , n, sizeof(pair), cmp); using namespace std; memset(tmp, inf, sizeof(tmp)); for (int i = ; i <= n; ++i)
{
int t = p[i].y;
*upp(tmp, tmp + i, t) = t;
} printf("%d\n", low(tmp, tmp + n, inf) - tmp);
}
BZOJ_1109.cpp
@Author: YouSiki
BZOJ 1109: [POI2007]堆积木Klo的更多相关文章
- BZOJ 1109 [POI2007]堆积木Klo(树状数组)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1109 [题目大意] Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体. ...
- 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】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游戏的目的是建一个塔,使得最多的积木在正确的位置 ...
- 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[ ...
随机推荐
- 最大M子段和 V2
51nod1053 这题还是我们熟悉的M子段和,只不过N,M<=50000. 这题似乎是一个堆+链表的题目啊 开始考虑把所有正数负数锁在一起. 比如: 1 2 3 -1 –2 -3 666 缩成 ...
- Web APP开发技巧总结
http://www.admin10000.com/document/6304.html 1. 当网站添加到主屏幕后再点击进行启动时,可隐藏地址栏(从浏览器跳转或输入链接进入并没有此效果) <m ...
- DPABI advanced edition 文件夹组织形式
❤ Regress out nuisance: ... csf\wm ('SPM apriori') {working directory}\Masks\WarpedMasks\SubIndex_Wh ...
- OS X运行AFNI的AlphaSim提示libgomp.1.dylib找不到的解决办法
运行环境:OS X Mavericks 10.9.4,AFNI 问题描述: 运行AlphaSim命令时,提示以下信息dyld: Library not loaded: /usr/local/lib/l ...
- Linux 信号详解六(可靠信号与不可靠信号)
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h&g ...
- 利用uploadify+asp.net 实现大文件批量上传。
前言 现在网上文件上传组件随便一搜都是一大堆,不过看大家一般都在用uploadify这个来上传文件.由于项目需要,我在来试了一下.因为第一次使用,也遇到了很多问题,特此记录! ------------ ...
- GWT-Dev-Plugin(即google web toolkit developer plugin)for firefox的下载地址
如果FireFox的版本为20,则对应google-web-toolkit的插件离线下载地址,不要用浏览器直接下载,用Flashget等客户端下载,超快. http://google-web-tool ...
- 无线AP和无线路由器区别
无线AP,即Access Point,也就是无线接入点.简单来说就是wifi共享上网中的无线交换机,它是移动终端用户进入有线网络的接入点. AD:51CTO技术沙龙 | 赋予APP不同凡响的交互和体验 ...
- A Regularized Competition Model for Question Diffi culty Estimation in Community Question Answering Services-20160520
1.Information publication:EMNLP 2014 author:Jing Liu(在前一篇sigir基础上,拓展模型的论文) 2.What 衡量CQA中问题的困难程度,提出从两 ...
- shell正则表达式(zhuan)
匹配中文字符的正则表达式:[u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^x00-xff] 评注:可以用来计算字符串的长度(一个 ...