cf 1241 D. Sequence Sorting(思维)
题意:
一个序列有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(思维)的更多相关文章
- D. Sequence Sorting dp
D. Sequence Sorting 题目大意:给你一个序列,有一种操作就是对所有相同的数可以挪到最前面,也可以挪到最后面,问最少操作次数. 首先,对于很多个相同的数,可以缩成两个位置,一个是就是这 ...
- BZOJ1345 Baltic2007 序列问题Sequence 【思维题】*
BZOJ1345 Baltic2007 序列问题Sequence Description 对于一个给定的序列a1,…,an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai和ai+1用 ...
- K.Bro Sorting(思维题)
K.Bro Sorting Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)T ...
- 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 ...
- HDU 2062:Subset sequence(思维)
Subset sequence Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- CF 327B. Hungry Sequence
B. Hungry Sequence time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- 【CF 1059C】 Sequence Transformation 数学
C. Sequence Transformation:http://codeforces.com/contest/1059/problem/C 题意 给你一个n,第一次输出1-n个数的gcd,然后你可 ...
- Codeforces Round #529 (Div. 3) E. Almost Regular Bracket Sequence(思维)
传送门 题意: 给你一个只包含 '(' 和 ')' 的长度为 n 字符序列s: 给出一个操作:将第 i 个位置的字符反转('(' ')' 互换): 问有多少位置反转后,可以使得字符串 s 变为&quo ...
- Serval and Parenthesis Sequence【思维】
Serval and Parenthesis Sequence 题目链接(点击) Serval soon said goodbye to Japari kindergarten, and began ...
随机推荐
- css 图形样式
参考:https://css-tricks.com/examples/ShapesOfCSS/
- Linux-使用之vim编译安装出现的问题
---恢复内容开始--- cd <directory> Short for "change directory". The shorthand name for the ...
- @@trancount什么意思(重要)
@@trancount什么意思 https://www.cnblogs.com/monian/archive/2012/08/24/2654392.html 在处理事务的时候,一般都用RollBack ...
- UOJ Contest #50: Goodbye Jihai
比赛传送门:Goodbye Jihai. \(\Huge{\mathbf{再见,己亥.\\你好,庚子!\\祝大家新春快乐!}}\) A. 新年的促销 这题如果直接做的话可能方向会想歪,方向对了其实就是 ...
- 7专题总结-高频题high frequency
Outline . Single Number I, II, III . Majority Number I, II, III . Best Time to Buy and Sale Stock I, ...
- 1. GC标记-清除算法(Mark Sweep GC)
世界上第一个GC算法,由 JohnMcCarthy 在1960年发布. 标记-清除算法由标记阶段和清除阶段构成. 标记阶段就是把所有的活动对象都做上标记的阶段. 标记阶段就是"遍历对象并标记 ...
- 1-8SpringBoot之切面AOP
SpringBoot提供了强大AOP支持,我们前面讲解过AOP面向切面,所以这里具体AOP原理就补具体介绍: AOP切面主要是切方法,我们一般搞一些日志分析和事务操作,要用到切面,类似拦截器: @As ...
- Android程序的入口点是什么,不是Main()吗
很多初入Android开发的网页可能不知道Android程序的入口点是什么,不是main()吗,当然我相信回复onCreate的在字面上不算错,但是你们想的是Activity中的onCreate 方法 ...
- python操作mongoDB(pymongo的使用)
pymongo操作手册 连接数据库 方法一(推荐) import pymongo client = pymongo.MongoClient(host="localhost",por ...
- MongoDB安装+基础操作
MongoDB 一. 安装 这里展示使用docker安装mongoDB 拉取最新MongoDB镜像 docker pull mongo 运行容器 docker run -itd --name mong ...