【51 nod 1294】 修改数组
来源:互联网 发布:淘宝网被冻结 编辑:程序博客网 时间:2024/05/15 23:44
Description
给出一个整数数组A,你可以将任何一个数修改为任意一个正整数,最终使得整个数组是严格递增的且均为正整数。问最少需要修改几个数?
Solution
对于一个数a[i],显然当它小于i时他肯定是要修改的,那么当有两个数a[u],a[v],且(u>v>i,a[u]>a[v]>a[i]),那么现在选哪一个呢?我们考虑取一个和i之间能容纳尽量多数并且尽量近的数,所以我们就比较a[u]-u,a[v]-v的大小,选一个尽量小的即可。
这样算法就很显然了,用LIS跑一下最长不下降子序列即可。
Code
#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;const int maxn=1e5+5;int f[maxn],a[maxn];int n,i,t,j,k,l,r,mid,num;int main(){ //freopen("data.in","r",stdin); scanf("%d",&n); for (i=1;i<=n;i++){ scanf("%d",&a[i]);a[i]-=i; if (a[i]<0) continue; if (a[f[num]]<=a[i] || !num) f[++num]=i; else{ l=1; r=num; while (l<r){ mid=(l+r)/2; if (a[f[mid]]<=a[i]) l=mid+1; else r=mid; } f[l]=i; } } t=n-num; printf("%d\n",t);}
0 0
- 51nod 1294 修改数组
- 51Nod-1294-修改数组
- 【51Nod 1294】修改数组
- 【51 nod 1294】 修改数组
- [51nod 1294]修改数组
- 51nod 1294 修改数组 dp
- 51NOD 1294 修改数组 【LIS】
- 51nod 1294 :修改数组 && HDU 5256:序列变换
- 51nod 1294 修改数组 (LIS变形_DP)
- 51nod 1294 修改数组(dp,逆向思维,最大上升子序列)
- 树状数组求不带修改前缀最值问题 51NOD 1272 最大距离
- 51Nod-1617-奇偶数组
- 后缀数组——51nod 1732 51nod婚姻介绍所
- 51nod 1732 51nod婚姻介绍所 后缀数组 + rmq
- 51 nod 1732 51nod婚姻介绍所(后缀数组||DP)
- 51nod 1270:数组的最大代价
- 51 nod 数组的最大代价
- 51Nod 编辑距离 DP+滚动数组
- 王小草【机器学习】笔记--分类算法之朴素贝叶斯
- 浅析MVC框架中View层的优雅设计及实例
- 【Leetcode】1. Two Sum
- AngularJS指令学习和理解
- JAVA中静态块、静态变量加载顺序详解
- 【51 nod 1294】 修改数组
- jquery $.expr[':'] 用法体会
- java常用的几种线程池比较
- DAO模式
- 13.服务器端脚本
- 在C语言中使用全局变量
- ExtJs实现阻止冒泡,以及再次允许冒泡——stopPropagation的正确使用
- SSL JudgeOnline 2322——运输
- WebRTC中丢包重传NACK实现分析