Codeforces 1144G Two Merged Sequences
题意:
将一个序列分成两个序列,两个序列中元素的相对顺序保持和原序列不变,使得分出的两个序列一个严格上升,一个严格下降。
思路:
我们考虑每个元素都要进入其中一个序列。
那么我们维护一个上升序列和一个下降序列,对于当前元素$i$:
如果它只能确定的进入一个序列,那么就让它进入。
如果它一个序列也进不去,那么答案就是'NO'。
如果它两个序列都可以进去,那么判断它和后一个元素(如果存在的话)的关系,如果它后一个元素比它大,那么让它进去上升序列,否则进去下降序列。
考虑这样为什么是对的:
首先我们知道一个存在答案的序列里面的元素重复度最大是$2$,那么对于上述的第三种操作,我们考虑一种最特殊的情况,
就是对于第一个元素的判断,它显然可以进入任意一个序列,但是至于让它进入哪个序列,我们不知道。
但是一个比较直观的感觉是,如果它和剩下的数相比相对来说是较大的,我们倾向于让它进入下降序列,反之,进入上升序列
那么其实不用跟剩下的所有数比,只需要让它和后一个数比一下即可。
因为这一步比较,相当于让这个数强行接在后一个数的前面,可以等价于去掉这个数,(做不了选择就不做选择了嘛
但是后一个数跟它相等怎么办?
相等,就两个序列分别进一个呗。
#include <bits/stdc++.h>
using namespace std; #define N 200010
#define INF 0x3f3f3f3f
int n, arr[N];
vector <int> A, B;
int used[N]; void solve()
{
A.clear(), B.clear();
memset(used, , sizeof used);
A.push_back(-);
B.push_back(INF);
for (int i = ; i <= n; ++i)
{
int x = arr[i], a = A.back(), b = B.back(), y;
if (x <= a && x >= b)
{
puts("NO");
return;
}
else if (x > a && x < b)
{
if (i == n)
used[i] = ;
else
{
y = arr[i + ];
if (y > x)
A.push_back(x);
else
{
B.push_back(x);
used[i] = ;
}
}
}
else if (x > a)
A.push_back(x);
else
{
used[i] = ;
B.push_back(x);
}
}
puts("YES");
for (int i = ; i <= n; ++i)
printf("%d%c", used[i], " \n"[i == n]);
} int main()
{
while (scanf("%d", &n) != EOF)
{
for (int i = ; i <= n; ++i) scanf("%d", arr + i);
solve();
}
return ;
}
Codeforces 1144G Two Merged Sequences的更多相关文章
- Codeforces 1144G Two Merged Sequences dp
Two Merged Sequences 感觉是个垃圾题啊, 为什么过的人这么少.. dp[ i ][ 0 ]表示处理完前 i 个, 第 i 个是递增序列序列里的元素,递减序列的最大值. dp[ i ...
- 1144G Two Merged Sequences ( 贪心+构造)
题目:https://codeforces.com/problemset/problem/1144/G 题意: 将一个序列分成两个序列,两个序列中元素的相对顺序保持和原序列不变,使得分出的两个序列一个 ...
- Codeforces #550 (Div3) - G.Two Merged Sequences(dp / 贪心)
Problem Codeforces #550 (Div3) - G.Two Merged Sequences Time Limit: 2000 mSec Problem Description T ...
- CodeForces 450B Jzzhu and Sequences (矩阵优化)
CodeForces 450B Jzzhu and Sequences (矩阵优化) Description Jzzhu has invented a kind of sequences, they ...
- Two Merged Sequences CodeForces - 1144G (暴力)
大意: 给定序列, 求划分为一个严格递增子序列和一个严格递减子序列, 可以为空. 跟 125D 类似的一个题, 直接暴力dfs, 用当前序列长度来剪枝, 状态不会太多, 但是会被一些数据卡掉, 特判一 ...
- codeforces 446A DZY Loves Sequences
vjudge 上题目链接:codeforces 446A 大意是说最多可以修改数列中的一个数,求最长严格递增的连续子序列长度. 其实就是个 dp 的思想,想好思路后交上去没想到一直 wa 在第二个测试 ...
- codeforces C. DZY Loves Sequences
http://codeforces.com/contest/447/problem/C 题意:给你n个数的序列,然后让你改变其中的一个数,求得最长上升连续序列的长度值. 思路:先从左边开始求出连续递增 ...
- Codeforces 264 B. Good Sequences
B. Good Sequences time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Codeforces 447C - DZY Loves Sequences
447C - DZY Loves Sequences 思路:dp 代码: #include<bits/stdc++.h> using namespace std; #define ll l ...
随机推荐
- Django的RestfulAPI框架RestFramework
Django的Restful-API框架 安装框架 #sudo pip3 install django #sudo pip3 install markdown #sudo pip3 install d ...
- kvm虚拟机的重命名
1.查看所有的kvm虚拟机 [root@5201351_kvm ~]# virsh list --all 2.重命名kvm虚拟机最好是将虚拟机先关机,然后再导出其xml文件 [root@5201351 ...
- [转][darkbaby]任天堂传——失落的泰坦王朝(下)
即使是日本业界人士也对1999年发生的“口袋妖怪所有权风波”知之甚少,实际上这个事件的结局足以改变游戏产业未来数十年的势力图,山内溥凭借着个人的睿智让任天堂再次渡过了命运的暗礁,而另一颗曾经炙手可热的 ...
- MapReduce的分区
第一部分 分区简述(比如国家由省市来划分) 分区:map的输出经过partitioner分区进行下一步的reducer.一个分区对应一个reducer,就会使得reducer并行化处理任务.默认为1 ...
- 《机器学习实战》中的程序清单2-1 k近邻算法(kNN)classify0都做了什么
from numpy import * import operator import matplotlib import matplotlib.pyplot as plt from imp impor ...
- 对于Python中回调函数的理解
关于回调函数,网上有很多说明和各种解释,多数在尝试用语言描述.我认为,如果对各个角色之间的关系不清楚,如果没有相关的编程需求,那么语言便非常无力,很难理解. 这是360百科的解释: 在计算机程序设计中 ...
- Kettle 4.2源码分析第二讲--Kettle插件结构体系简介
1. 插件体系结构 1.1. 插件技术原理 1.1.1. 插件概念说明 插件是一种遵循统一的预定义接口规范编写出来的程序,应用程序在运行时通过接口规范对插件进行调用,以扩展应用程序的功能.在英 ...
- Python爬虫实例(六)多进程下载金庸网小说
目标任务:使用多进程下载金庸网各个版本(旧版.修订版.新修版)的小说 代码如下: # -*- coding: utf-8 -*- import requests from lxml import et ...
- LoadRunner-关联(自动关联和手动关联)
使用LR录制脚本,新建课程:每次新建课程都会产生一个新的courseid和partid,直接使用录制的脚本执行是不行的.所以用到了关联. 注:关联分手动和自动关联,自动关联搜索出一些不必要关联的数据, ...
- memcached-session-manager 教程实现session共享
1简单介绍 1.1决定用什么序列化策略. 1.2配置tomcat 1.2.1加入 memcached-session-manager jar 包到tomcat中. ...