[CF486E]LIS of Sequence题解 题目链接 题意: 给你一个长度为n的序列a1,a2,...,an,你需要把这n个元素分成三类:1,2,3: 1:所有的最长上升子序列都不包含这个元素 2:有但非所有的最长上升子序列包含这个元素 3:所有的最长上升子序列都包含这个元素 输入格式: 第一行包含一个正整数n,表示序列的长度.第二行包含n个正整数a1,a2,...,an,表示序列中的元素. 输出格式: 一行,包含一个长度为n的.由1,2,3三种数字组成的字符串,第i个数字表示ai所属类…
题目大意: 一个序列,问其中每一个元素是否为所有最长上升子序列中的元素或是几个但不是所有最长上升子序列中的元素或一个最长上升子序列都不是. 思路: 求以每一个元素为开头和结尾的最长上升子序列长度,若两者相加比最长上升子序列长度+1小,则一个也不是:否则若有另一元素与它的两个值完全相同,则不是所有;否则在所有. 代码: #include<map> #include<cstdio> #include<algorithm> using namespace std; ; map…
题目 This is yet another problem on regular bracket sequences. A bracket sequence is called regular, if by inserting "+" and "1" into it we get a correct mathematical expression. For example, sequences "(())()", "()"…
题意:求最大上升子序列 思路:才发现自己不会LIS,用线段树写的,也没说数据范围就写了个离散化,每次查找以1~a[i]-1结尾的最大序列答案,然后更新,这样遍历一遍就行了.最近代码总是写残啊... 刚看了LIS的nlogn写法(贪心+二分):维护一个dp[i]表示最大长度为i时的最小结尾,初始memset为INF,最终dp数组的长度为答案.这个很好维护,如果当前的a[i]比dp[len]要大,那么显然最大长度加一,dp[len + 1] = a[i]:如果比dp[len]小,那么我就去二分查找前…
http://poj.org/problem?id=3581 给一串数,将其分成三个区间并且颠倒这三个区间,使得新数列字典序最小. 参考:http://blog.csdn.net/libin56842/article/details/46417301 (不是论文题,但是还是借鉴了题解,我是真的菜) 首先我们分成的三个区间肯定是一个前缀+中间一段+一个后缀. 那么我们先求前缀,方法很简单,只需要将原数列倒着存,然后找字典序最小的后缀即可.可以用后缀数组实现. (因为原数列前缀的颠倒肯定是原数列颠倒…
https://www.lydsy.com/JudgeOnline/problem.php?id=4355 维护一个长度为N的序列a,现在有三种操作: 1)给出参数U,V,C,将a[U],a[U+1],...,a[V-1],a[V]都赋值为C. 2)给出参数U,V,C,对于区间[U,V]里的每个数i,将a[i]赋值为max(a[i]+C,0). 3)给出参数U,V,输出a[U],a[U+1],...,a[V-1],a[V]里值为0的数字个数. 吉如一论文板子题(当然所有的操作都来自论文拼起来的那…
Pop Sequence(PAT) https://www.nowcoder.com/pat/5/problem/4090 前言: PAT上一道Stack的应用题,简化版的有<信息学一本通·普及篇>的车厢调度 题目简述: 输入依次给定三个不大于1000的整数:m,n,k 其中m是栈的最大长度,有n个元素,进行k种出栈猜测 以下k行,输入出栈猜测,针对每种猜测,判断是否可行,可行则输出"YES",反之输出"NO" 思路: 将每次给定的出栈猜测当做数组a,然…
题目链接 算法:后缀数组+ST表+贪心   各路题解都没怎么看懂,只会常数巨大的后缀数组+ST表,最大点用时 \(4s\), 刚好可以过... 确定合法序列长度   首先一个括号序列是合法的必须满足以下两个条件: (的数量和)的数量相等. 序列任意前缀中,)的数量都小于等于(的数量:或者序列任意后缀中,(的数量都小于等于)的数量(在满足条件1的情况下两种说法等价).   这两个条件共同构成了检验括号序列合法的充要条件.   所以题目中要求的合法序列最小值,其实就是让两个括号数目相等时的总长,让少…
本题就是给出一个数k和一个数组,包含N个元素,通过每次添加�数组中的一个数的操作,最后须要得到1 - N的一个序列,不用排序. 能够从暴力法入手,然后优化. 这里利用hash表进行优化,终于得到时间效率是O(n*n)的算法,并且常数项应该非常低,速度还挺快的. 思路: 1 假设数组A[i]在1 -N 范围内,就利用bool B[]记录,这个数已经找到了: 2 假设A[i]的值之前已经找到了,那么就添加�k操作,得到新的值A[i]+k,看这个值是否找到了,假设没找到,就使用B记录,假设之前已经找到…
http://acm.hdu.edu.cn/showproblem.php?pid=5306 给一个数组,m次操作: 1:l r x,将a[i](l<=i<=r)=min(a[i],x) 2:l r,求区间最大值. 3:l r,求区间和. 吉司机线段树,论文题,论文讲的很详细了. 维护一个最大值mx和次大值se,分类讨论: 当mx<=x显然没有影响. 当se<x<mx打标记修改区间. 否则暴力递归两个儿子. 通过奇(看)技(论)淫(文)巧能够证明复杂度是O(mlogn). (…