noname

【问题描述】

给定一个长度为n的正整数序列,你的任务就是求出至少需要修改序列中的多少个数才能使得该数列成为一个严格(即不允许相等)单调递增的正整数序列,对序列中的任意一个数,你都可以将其修改为任意的正整数。

【输入格式】

每个测试点第一行为一个正整数T,表示该测试点内的数据组数,你需要对该测试点内的T组数据都分别给出正确的答案才能获得该测试点的分数。

接下来T组数据,每组数据第一行一个正整数n,表示序列长度,接下来一行n个正整数描述这个序列。

【输出格式】

对于每一组测试数据输出一行一个非负整数表示答案。

【输入输出样例】

noname.in

noname.out

4

3

1 1 2

3

2 2 3

4

1 2 3 4

4

2 3 3 4

2

1

0

2

 

【样例解释】

第一组数据中,由于正整数的限制,只能修改序列中第2、3个数。

第二组数据中,将第一个数修改为1即可。

第三组数据已经符合条件,不需要修改。

第四组数据中,由于正整数的限制,只修改一个数并不能完成任务,而需要同时修改前两个数或者后两个数。

 

【数据规模与约定】

对于30%的数据,有1≤n≤10。

对于80%的数据,有1≤n,T≤50,且输入序列中每个数均不超过50。

对于100%的数据,有1≤n≤50000,1≤T≤5000,输入序列中每个数均为不超过1000000000(10^9)的正整数,且每个测试点中T组数据对应的n值总和不超过500000。

【题解思路】

这题看着怎么这么像LIS啊?(:雾

回顾一下dp入门题LIS ?

依稀记得这题是可以二分优化的吧:O(n^2) à O(nlogn)

我们思考类型题:

  1. 把一个序列改成非严格单调递增的(单调不下降的),至少需要修改多少个数?

    A:用该序列总长度减去最长不下降子序列的长度。

    2.那么把一个序列改成严格单增的呢?

    A:用该序列总长度减去最长上升子序列的长度?标准错答案啊。

    正解是:构造序列B[i] = A[i] – i;答案即为序列总长度减去B的最长不下降子序列。

    Why???  因为要求严格单调递增,所以前一项与后一项至少相差一,将这个必要的差值减去,就相当于求B改成非严格单增最少需修改的数,也就相当于第一个问题。

    3.(本题)在2的条件下把整数改成了正整数。题目意思就变成:求首项为非负整数的最长上升子序列。

那岂不是很简单的一个dp ???当然还是需要二分优化的啦。

【code】

#include<bits/stdc++.h>
using namespace std;
const int maxx= ;
int a[maxx],b[maxx],n,T,f[maxx],len;
inline int read(){
int x=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int find(int x){
int l = ,r = len + ;
if(x < f[])return ;
while(l+ < r){
int m = l + r>>;
if(f[m] <= x) l=m;
else r = m;
}
return l;
}
void work(){
len = ;
for(int i = ;i <= n;i++){
if(b[i] < )continue;
int id = find(b[i]);
len = max(id + ,len);
f[id+] = min(f[id+],b[i]);
}
printf("%d\n",n-len);
}
int main(){
freopen("noname.in","r",stdin);
freopen("noname.out","w",stdout);
T = read();
while(T--){
n = read();
memset(f,0x3f,sizeof(f));
for(int i = ;i <= n; ++i){
a[i] = read();
b[i] = a[i] - i;
}
work();
}
return ;
}

noip模拟【noname】的更多相关文章

  1. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  2. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  3. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  4. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  5. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  6. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  7. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  8. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  9. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

  10. CH Round #49 - Streaming #4 (NOIP模拟赛Day2)

    A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...

随机推荐

  1. jquery.ajax请求aspx和ashx的异同 Jquery Ajax调用aspx页面方法

    1.jquery.ajax请求aspx 请求aspx的静态方法要注意一下问题: (1)aspx的后台方法必须静态,而且添加webmethod特性 (2)在ajax方法中contentType必须是“a ...

  2. JavaScript-合同到期续约案例

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. Self hosted OWIN 绑定地址127.0.0.1,外网无法访问

    static void Main()         {             string baseAddress = "http://localhost:4004/";   ...

  4. html utf-8 中文乱码

    刚才用ajax从记事本中读文档的时候,发现在页面上显示是乱码. 页面编码:<meta charset="utf-8"> 搞半天最后发现是记事本编码格式的问题,记事本默认 ...

  5. 记无法用被动方式登录远程linux主机的原因

    [环境]: linux主机:华为企业云 ftp服务端:vsftpd 客户端:ftp命令行工具,安卓端ES文件浏览器 [现象]: 在ES文件浏览器中,使用被动方式没法连接,使用主动方式可以连接,但是没法 ...

  6. sql server case

    use mytest go exec p_city 2,4 exec p_city_cnt 2,3 select stuff((select ',' + city_id from cities for ...

  7. 利用python 数据分析入门,详细教程,教小白快速入门

    这是一篇的数据的分析的典型案列,本人也是经历一次从无到有的过程,倍感珍惜,所以将其详细的记录下来,用来帮助后来者快速入门,,希望你能看到最后! 需求:对obo文件进行解析,输出为json字典格式 数据 ...

  8. python 数据序列化(json、pickle、shelve)

    本来要查一下json系列化自定义对象的一个问题,然后发现这篇博客(https://www.cnblogs.com/yyds/p/6563608.html)很全面,感谢作者,关于python序列化的知识 ...

  9. 32个使用python代码片段

    1.冒泡排序 lis = [56,12,1,8,354,10,100,34,56,7,23,456,234,-58] def sortport():    for i in range(len(lis ...

  10. ::before 伪元素三角

    ul::before{ content: ''; width:; height:; border: 10px solid transparent; border-bottom: 10px solid ...