码迷,mamicode.com
首页 > 编程语言 > 详细

51Nod 1294 修改数组

时间:2018-07-16 19:35:09      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:bsp   ref   alt   关注   lin   https   ++   严格   href   

题目来源: HackerRank
基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题
技术分享图片 收藏
技术分享图片 关注
给出一个整数数组A,你可以将任何一个数修改为任意一个正整数,最终使得整个数组是严格递增的且均为正整数。问最少需要修改几个数?
Input
第1行:一个数N表示序列的长度(1 <= N <= 100000)。
第2 - N + 1行:每行1个数,对应数组元素。(0 <= A[i] <= 10^9)
Output
输出最少需要修改几个数使得整个数组是严格递增的。
Input示例
5
1
2
2
3
4
Output示例
3
 1 //2018-07-16 17:15:29
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 const int N = 1000005;
 8 
 9 int n;
10 int a[N], d[N], b[N], ans;
11 
12 int main(){
13     scanf("%d", &n);
14     int head = 0;
15     for(int i=1; i<=n; i++){
16         scanf("%d", &b[i]);
17         if(b[i]==0 && i==1) a[++head] = b[i]; //偷懒的地方 
18         if(b[i]-i >= 0) a[++head] = b[i]-i;
19         else ans++;
20     }
21     d[1] = a[1];
22     int len = 1;
23     for(int i=2; i<=head; i++){
24         if(a[i] >= d[len]) d[++len] = a[i];
25         else{
26             int j = upper_bound(d+1, d+len+1, a[i])-d;
27             d[j] = a[i]; 
28         }
29     }
30     printf("%d\n", head-len+ans);
31     
32     return 0;
33 }

 

51Nod 1294 修改数组

标签:bsp   ref   alt   关注   lin   https   ++   严格   href   

原文地址:https://www.cnblogs.com/sineagle/p/9319282.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!