1109: [POI2007]堆积木Klo

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1139  Solved: 423
[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

5
1 1 2 5 4

Sample Output

3

设ai为第i个数字,si = i-ai

当且仅当 si<=sj && ai<=aj 才能满足第i和第j块积木都能放到正确的位置上

这就变成了一个二维偏序的问题了,也很像LIS,用树状数组处理就OK

#include<stdio.h>
#include<algorithm>
using namespace std;
typedef struct Res
{int x, y;bool operator < (const Res &b) const{if(x<b.x || x==b.x && y<b.y)return 1;return 0;}
}Res;
Res s[100005];
int n, tre[100005], dp[100005];
int Query(int k)
{int ans = 0;if(k==0)return 0;while(k){ans = max(ans, tre[k]);k -= k&-k;}return ans;
}
void Update(int k, int x)
{while(k<=n){tre[k] = max(tre[k], x);k += k&-k;}
}
int main(void)
{int i, x, ans;scanf("%d", &n);for(i=1;i<=n;i++){scanf("%d", &x);s[i].x = i-x;s[i].y = x;}ans = 0;sort(s+1, s+n+1);for(i=1;i<=n;i++){if(s[i].x<0)continue;dp[i] = Query(s[i].y-1)+1;Update(s[i].y, dp[i]);ans = max(ans, dp[i]);}printf("%d\n", ans);return 0;
}

bzoj 1109: [POI2007]堆积木Klo(二维偏序)相关推荐

  1. BZOJ.1109.[POI2007]堆积木Klo(DP LIS)

    BZOJ 二维\(DP\)显然.尝试换成一维,令\(f[i]\)表示,强制把\(i\)放到\(a_i\)位置去,现在能匹配的最多数目. 那么\(f[i]=\max\{f[j]\}+1\),其中\(j& ...

  2. BZOJ 1109 [POI2007]堆积木Klo(树状数组)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1109 [题目大意] Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体. ...

  3. BZOJ 1109: [POI2007]堆积木Klo 神分析, LIS, BIT, 二分

    Description Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体.每个积木上面都有一个数.Mary用他的 所有积木垒了一个高塔.妈妈告诉Mary游戏的目的是建一个塔,使得最多的 ...

  4. [2019.3.17]BZOJ1109 [POI2007]堆积木Klo

    考虑暴力dp. 设\(dp_i\)表示前\(i\)个积木,保留积木\(i\)的最大答案. 那么有 \(dp_i=max(dp_j)+1(i>j,a_i>a_j,a_i-a_j\le i-j ...

  5. BZOJ1109: [POI2007]堆积木Klo

    一开始状态就定的不一样-一直想着优化转移然后越走越远.. %%%Seter 我们令f[i]表示第i个积木的积木回到自己的位置,前i个积木最多有多少个归位 枚举前一个归位的积木,可以得到 f[i]=f[ ...

  6. [POI2007]堆积木Klo

    题解: dp定义方程的时候 好像也不能都用前一个来递推..这样就不能优化了 这题看了题解才想出来... 还是很简单的啊.... 我们定义f[i]表示前i个最大收益 那么j要能从i转移就得满足a[i]- ...

  7. BZOJ 2131 免费的馅饼(DP,二维偏序问题 / 旋转坐标轴转化问题)【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2131 是 hydro 的 BZOJ ...

  8. CodeForces - 1321E World of Darkraft: Battle for Azathoth(二维偏序+线段树)

    题目链接:点击查看 题目大意:给出 n 个武器及花费,m 个防具及花费,以及 k 个怪物及属性,每个怪物的属性同样有着攻击力,防御力以及价值,初始时可以选择一个武器以及一个防具,如果此时的攻击力大于怪 ...

  9. CodeForces - 1295E Permutation Separation(线段树+二维偏序,好题)

    题目链接:点击查看 题目大意:给出一个1~n的排列,现在要求选择一个合适的分割点,将整个排列分为两个部分,要求通过适当的移动使得前半部分的所有数值都小于后半部分的数值,现在给出移动每个数字所花费的代价 ...

最新文章

  1. codevs1258 关路灯(☆区间dp)
  2. 程序员又背锅?美团外卖声明“杀熟会员”是技术原因,软件定位缓存导致配送费不准!网友:程序员太惨!...
  3. 对抗性攻击轻松愚弄人工智能
  4. 使用群集保障SQL Server 2005的高可用性(2)
  5. 很牛逼的短链接,我们一起来晒晒短链接程序(转)
  6. 2020下半年新机最新消息_2020下半年新机汇总,除了iPhone 12,还有这些旗舰
  7. SpringBoot2.x整合Redis 分布式集群_01
  8. RTX5 | 消息队列02 - 放入与取出消息
  9. 5 天 6 亿 3000 万数据泄露,怎么做才能跑赢骗子?
  10. msgpack使用 php_如何使用msgpack进行读写?
  11. Code snippet of the day : Get Chinese Spell in C#
  12. kafka 安装步骤
  13. php仿大众点评,Android高仿大众点评(带服务端)
  14. Android 微信支付
  15. 软件开发常见的软件系统总结
  16. 古剑奇谭3steam服务器稳定吗,国产游戏《古剑奇谭3》占据steam热销榜第一?这么好玩吗?...
  17. python实时曲线绘制_python画曲线
  18. python爬取微信好友信息_python itchat 爬取微信好友信息
  19. web前端人员每天必须关注的前端社区网站
  20. python-面向对象的编程

热门文章

  1. python编程100个小程序-100个Python练手小程序
  2. python爬虫什么意思-Python 爬虫是什么
  3. python入门指南-Python 入门指南
  4. 友达以上恋人未满 体验博越G-Netlink系统
  5. python模板代码替换_Python - 安全替换字符串模板(safe_substitute) 详细解释
  6. groupby java_Java流-在GroupBy之后获取内部元素
  7. 【设计模式笔记】抽象工厂模式
  8. 蓝桥杯2019真题-完全二叉树的权值
  9. vim php psr,PHP编码规范(PSR-1)-基本代码规范
  10. java keydown_键盘事件keydown、keypress、keyup随笔整理总结