CF1241 D Sequence Sorting(离散化+DP)
题意:
给定数组a[n],用两种操作:
1.将数组中所有值为x的数移至开头
2.将数组中所有值为x的数移至末尾
问,经过最少多少次操作,能将数组a[n]变为非递减的有序数列?
(1<=n<=3e5,1<=a[i]<=n)
思路:
如果一个数全部分布在一段连续的区间上,那么可以不移动这个数。如果有好几个这样的连续的连续区间,且它们都是非递减的,那么这一个大区间内的数都可以不移动。因此只要求出最大的(所含数种类最多的)大区间,就能得到答案(只移动剩余的数)。
将所有数离散化之后,记录每个数的最大下标和最小下标,之后实际上是一个最长上升子序列问题。
#include <bits/stdc++.h>
using namespace std;
const int maxn=3e5+5;
int a[maxn],lisan[maxn];
int dp[maxn],max1[maxn],min1[maxn];
int main(){
int q,n;
cin>>q;
while(q--){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
lisan[i]=a[i];
}
sort(lisan+1,lisan+1+n);
int len=unique(lisan+1,lisan+1+n)-(lisan+1);
for(int i=1;i<=n;i++) a[i]=lower_bound(lisan+1,lisan+len+1,a[i])-lisan;
for(int i=1;i<=n;i++){
max1[a[i]]=i;
}
for(int i=n;i>=1;i--){
min1[a[i]]=i;
}
int res=1;
for(int i=1;i<=len;i++)
dp[i]=1;
for(int i=2;i<=len;i++){
if(min1[i]>max1[i-1]){
dp[i]=dp[i-1]+1;
}
res=max(res,dp[i]);
}
int ans=len-res;
printf("%d\n",ans);
}
}
CF1241 D Sequence Sorting(离散化+DP)的更多相关文章
- D. Sequence Sorting dp
D. Sequence Sorting 题目大意:给你一个序列,有一种操作就是对所有相同的数可以挪到最前面,也可以挪到最后面,问最少操作次数. 首先,对于很多个相同的数,可以缩成两个位置,一个是就是这 ...
- LightOJ 1085(树状数组+离散化+DP,线段树)
All Possible Increasing Subsequences Time Limit:3000MS Memory Limit:65536KB 64bit IO Format: ...
- poj 3666 Making the Grade(离散化+dp)
Description A straight dirt road connects two fields on FJ's farm, but it changes elevation more tha ...
- Codeforces 777E(离散化+dp+树状数组或线段树维护最大值)
E. Hanoi Factory time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- 项目安排(离散化+DP)
题目来源:网易有道2013年校园招聘面试二面试题 题目描述: 小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时间,假设做完每个项目后,拿到报酬都是不同的 ...
- POJ 题目1141 Brackets Sequence(区间DP记录路径)
Brackets Sequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 27793 Accepted: 788 ...
- HDU 1141---Brackets Sequence(区间DP)
题目链接 http://poj.org/problem?id=1141 Description Let us define a regular brackets sequence in the fol ...
- HDU 2836 (离散化DP+区间优化)
Reference:http://www.cnblogs.com/wuyiqi/archive/2012/03/28/2420916.html 题目链接: http://acm.hdu.edu.cn/ ...
- hdu 4833 离散化+dp ****
先离散化,然后逆着dp,求出每个点能取到的最大利益,然后看有没有钱,有钱就投 想法好复杂 #include <stdio.h> #include <string.h> #inc ...
随机推荐
- 命令行打包war包
输入jar -cvf 包名.war 目录/*
- webpack2.0 基本使用
webpack是一款前端模块打包工具, 它的出现是由于现代web开发越来越复杂,如果还是像原来那样把所有的js代码都写到一个文件中,维护非常困难.而解决复杂化的方法通常是分而治之,就是把复杂化的东西进 ...
- Centos7.6替换自带的jre安装jdk
Centos7.6自带jre 1.8,可以作为java运行环境.但如果要编译java程序那就需要jdk,以下介绍如何把自带的jre卸掉并安装jdk 首先要卸载自带的jre PS:由于不同版本的操作系统 ...
- 攻防世界--game
题目链接:https://adworld.xctf.org.cn/task/answer?type=reverse&number=4&grade=0&id=5074 1.准备 ...
- ajax_封装函数_步骤1
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
- XMPP即时通讯协议使用(五)——搭建简单的Openfire插件
前言 在开发Openfire插件前需要构建完成服务器源码编辑环境,具体操作步骤请参照Openfire服务器源码编译的了解. 开发简单的Openfire插件 1.已构建完成的Openfire源码结构如下 ...
- vue开发 - 根据vue-router的meta动态设置html里title标签内容
1.路由文件 :router/index.js 添加 meta属性配置: import Vue from 'vue' import Router from 'vue-router' import in ...
- 脚本_检测 MySQL 数据库连接数量
#!bin/bash#功能:检测 MySQL数据库连接数量,以满足对 MySQL 数据库的监控需求,查看 MySQL 连接是否正常.#作者:liusingbon#本脚本每 2 秒检测一次 MySQL ...
- lvm相关知识
参考资料: 1.https://www.cnblogs.com/mchina/p/linux-centos-logical-volume-manager-lvm.html#top
- 【归纳】Layui table.render里的json后台传入
在使用Layui的table元素时,传入的json的数据格式是有其自身定义的,需要另外添加一些字符,以正确传入. 为了传入符合前端格式的数据: table.render({ elem: '#test' ...