题意:

一个序列有n个数,有一种操作,你可以选一个数x,使这个序列中等于x的数都移到序列头或尾。

问最少几次操作后,可以使这个序列非降序。

思路:

(以下说bi移动到哪里,其实就是指a1……an中等于bi的数移动到哪里)

设这个序列为a1……an,排序并去重后为b1……bm ,如果bi要移到开头,那么bi,bi-1,……,b1肯定要依次移到开头,移到尾部也是同理。

也就是说,最后就是bl……br不需要移动,而r-l越大越好,就是不需要移动的这连续的一段越长越好。

移动到头部和尾部的那些最后一定符合要求,不需要我们操心,我们只需要判断bl……br在原序列上在不移动的情况下是否符合非降序即可。

代码:

#include <stdio.h>
#include <queue>
#include <string>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <map>
#include <set>
#include <iostream>
using namespace std;
typedef long long int ll;
const int maxn = 3e5 + ;
const int inf = 0x3f3f3f3f;
const ll mod = 1e9 + ;
const ll seed = ;
int a[maxn],l[maxn],r[maxn],n,b[maxn];
int main()
{
int t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i = ;i <= n;i++){
scanf("%d",&a[i]);
if(l[a[i]] == )
l[a[i]] = i;
r[a[i]] = i;
}
sort(a + ,a + n + );
int cnt = ;
b[++cnt] = a[];
for(int i = ;i <= n;i++){
if(a[i] != a[i - ])
b[++cnt] = a[i];
}
n = cnt; int ans = ,_l = ,_r = ;
while(_r <= n){
if(r[b[_r - ]] > l[b[_r]]){
ans = max(ans,_r - - _l + );
_l = _r;
}
_r++;
}
ans = max(ans,n - _l + );
printf("%d\n",n - ans);
for(int i = ;i <= n;i++)
l[b[i]] = ;
}
return ;
}

cf 1241 D. Sequence Sorting(思维)的更多相关文章

  1. D. Sequence Sorting dp

    D. Sequence Sorting 题目大意:给你一个序列,有一种操作就是对所有相同的数可以挪到最前面,也可以挪到最后面,问最少操作次数. 首先,对于很多个相同的数,可以缩成两个位置,一个是就是这 ...

  2. BZOJ1345 Baltic2007 序列问题Sequence 【思维题】*

    BZOJ1345 Baltic2007 序列问题Sequence Description 对于一个给定的序列a1,…,an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai和ai+1用 ...

  3. K.Bro Sorting(思维题)

    K.Bro Sorting Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others)T ...

  4. Codeforces Round #591 (Div. 2, based on Technocup 2020 Elimination Round 1) D. Sequence Sorting

    链接: https://codeforces.com/contest/1241/problem/D 题意: You are given a sequence a1,a2,-,an, consistin ...

  5. HDU 2062:Subset sequence(思维)

    Subset sequence Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...

  6. CF 327B. Hungry Sequence

    B. Hungry Sequence time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  7. 【CF 1059C】 Sequence Transformation 数学

    C. Sequence Transformation:http://codeforces.com/contest/1059/problem/C 题意 给你一个n,第一次输出1-n个数的gcd,然后你可 ...

  8. Codeforces Round #529 (Div. 3) E. Almost Regular Bracket Sequence(思维)

    传送门 题意: 给你一个只包含 '(' 和 ')' 的长度为 n 字符序列s: 给出一个操作:将第 i 个位置的字符反转('(' ')' 互换): 问有多少位置反转后,可以使得字符串 s 变为&quo ...

  9. Serval and Parenthesis Sequence【思维】

    Serval and Parenthesis Sequence 题目链接(点击) Serval soon said goodbye to Japari kindergarten, and began ...

随机推荐

  1. Spring 通读官方文档

    Spring 通读官方文档 这部分参考文档涵盖了Spring Framework绝对不可或缺的所有技术. 其中最重要的是Spring Framework的控制反转(IoC)容器.Spring框架的Io ...

  2. Linux centosVMware df命令、du命令、磁盘分区

    一.df命令 df(disk filesystem的简写)用于查看自己挂载磁盘的总容量.使用容量.剩余容量,可以不加任何参数,默认以KB为单位. [root@davery ~]# df文件系统 1K- ...

  3. 搭建solr集群的时候出现 ./zkcli.sh:行13: unzip: 未找到命令

    主要的原因是: linux系统下面没有安装压缩解压工具    zip 和 unzip:需要我们自己手动的安装: 利用yum命令安装即可: yum install -y unzip zip

  4. 083、Java数组之方法返回数组

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  5. Vue项目中v-for无法渲染数据

    在Vue项目中,我们想要实现下面的布局效果 后端返回的数据格式如下,可以看出产品列表五张图的数据位于同一个数组中 而我的html结构如下: 我希望直接渲染左边一张大图,然后右边的四张小图通过v-for ...

  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:分割按钮

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. (十)微信小程序---上传图片chooseImage

    官方文档 示例一 wxml <view bindtap="uploadImage">请上传图片</view> <image wx:for=" ...

  8. 062、Java中的方法重载

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  9. 人脸识别 API Key和Secret Key作用

    App key简称API接口验证序号,是用于验证API接入合法性的.接入哪个网站的API接口,就需要这个网站允许才能够接入,如果简单比喻的话:可以理解成是登陆网站的用户名 App Secret简称AP ...

  10. Java 文件

    章节 Java 基础 Java 简介 Java 环境搭建 Java 基本语法 Java 注释 Java 变量 Java 数据类型 Java 字符串 Java 类型转换 Java 运算符 Java 字符 ...