noip模拟【noname】
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)
我们思考类型题:
- 把一个序列改成非严格单调递增的(单调不下降的),至少需要修改多少个数?
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】的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
- CH Round #49 - Streaming #4 (NOIP模拟赛Day2)
A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...
随机推荐
- flask orm
#查询 #查第一行 session.query(User.id,User.userName,User.password).first() #查所有行 sessi ...
- c# Mongodb批量更新
public void Put(List<OnlineItem> datas) { try { ...
- Oracle数据库备份实验笔记[不完整,内容乱]
rman target / log=/orasoft/backup/${DATE}backup1.log <<EOFrun {allocate channel c1 device type ...
- 解决sqlserver修改被阻止的提示
https://jingyan.baidu.com/article/f79b7cb3664f299144023ef8.html 工具——选项——选择designers---表设计器和数据库设计器,将阻 ...
- Sql 嵌套循环
DECLARE @i INT ,@j INT BEGIN PRINT 'satrt i:'+CAST(@i AS varchar) BEGIN PRINT 'j:'+CAST(@j AS varcha ...
- QDialog 使用Demo
[1].pro QT += core gui greaterThan(QT_MAJOR_VERSION, ): QT += widgets TARGET = TestDialog TEMPLATE = ...
- 关于 redis、memcache、mongoDB 的对比 转
从以下几个维度,对 redis.memcache.mongoDB 做了对比.1.性能都比较高,性能对我们来说应该都不是瓶颈.总体来讲,TPS 方面 redis 和 memcache 差不多,要大于 m ...
- android手机平板如何使用usb有线网卡
最近有个项目需要在android平板上使用usb有线网卡,所以做了一部分工作,在这里简单总结一下. 我在TB上购买了一个micro-usb接口的android免驱有线网卡,这个网上很多,随便买一个符合 ...
- 微信小程序制作家庭记账本之四
第四天,仍然对记账本代码进行研究,对按钮的大小设置,颜色,具体位置进行分析,但其中很多代码都不明白.
- [转载] mysql 索引中的USING BTREE 的意义
索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型. 根据存储引擎定义每个表的最大索引数和最大索引长度.所有存储引擎支持每个表至少16个索引,总 ...