首页 > 其他分享 >abc134E - Sequence Decomposing

abc134E - Sequence Decomposing

时间:2024-07-13 09:53:01浏览次数:5  
标签:Sequence Decomposing 序列 反链 abc134E define

abc134E - Sequence Decomposing

题意:给定一个序列,将其划分成若干个不相交的严格上升子序列,求划分的最小的子序列数量。

题解:
我们可以定义严格偏序关系,\(i \prec j\)当\(i< j\)且\(a_i< a_j\),也就是我们要将整个序列划分成若干个链。
根据 Dilworth’s theorem,最小链覆盖数=最大反链大小,
假设对于两个在反链中的元素i,j不妨假设\(i<j\)
显然有\(a_i \geq a_j\),也就是说最大反链大小等于最长不上升子序列的长度。

#include<bits/stdc++.h>
#define fo(i,a,b) for (ll (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (ll (i)=(b);(i)>=(a);(i)--)
#define lc (o<<1)
#define rc ((o<<1)|1)
#define mk(x,y) make_pair((x),(y))
#define eb emplace_back
#define A puts("Yes")
#define B puts("No")
using namespace std;
typedef double db;
typedef long long ll;
typedef unsigned long long ull;
const ll inf=1ll<<60;
const int N=2e5+5;
int a[N],n,b[N],m,c[N];
int lowbit(int x){
	return x&(-x);
}
void upd(int x,int y){
	for (;x<N;x+=lowbit(x)) c[x]=max(c[x], y);
}
int ask(int x){
	int s=0;
	for (;x;x-=lowbit(x)) s=max(s, c[x]);
	return s;
}
int main(){
	
//	freopen("data.in","r",stdin);
	scanf("%d",&n);
	fo(i,1,n) scanf("%d",&a[i]),b[i]=a[i];
	sort(b+1,b+n+1);
	m=unique(b+1,b+n+1)-(b+1);
	fo(i,1,n) a[i]=lower_bound(b+1,b+m+1,a[i])-b;
	
	int ans=0,x;
	fd(i,n,1) {	
		x=ask(a[i])+1;
		upd(a[i],x);
		ans=max(ans, x);
	}
	printf("%d\n",ans);
	
	
	return 0;
}

标签:Sequence,Decomposing,序列,反链,abc134E,define
From: https://www.cnblogs.com/ganking/p/18299700

相关文章

  • CF1770F Koxia and Sequence(条件统计转组合数计数)
    题意简述给定\(n,x,y\),定义序列\(\{a_n\}\)合法当且仅当\(\sum_{i=1}^na_i=x\)且\(\operatorname{or}_{i=1}^n=y\),你需要求出\(\oplus_{a\\text{is}\\text{valid}}\oplus_{i=1}^na_i\)的值。\(n<2^{40},x<2^{60},y<2^{20}\)。分析第一步:先做一波非常重要的分析答......
  • B. Missing Subsequence Sum
    原题链接题解1.如果没有不能表示出\(k\)的限制,那么数组由一众二次方构成2.对于小于\(k\)的数,考虑\(k\)的最高位\(i\)由于\([0,i-1]\)最多为\(2^i-1\)所以可以考虑添加一个\(k-2^i\)来表示完\([1,k-1]\)内所有的数(尽管有重复)同时删掉\(2^i\)3.对于大于\(k\)......
  • "HIBERNATE_SEQUENCE" does not exist问题处理
    JavaWeb应用在MySQL环境下可以正常运行,数据迁移至Oracle或者人大金仓后应用运行爆出如下错误:严重:Servlet.service()forservlet[JeeCmsAdmin]incontextwithpath[/dhccms]threwexception[org.hibernate.exception.SQLGrammarException:couldnotgetnextsequence......
  • 深入剖析C++的 “属性“(Attribute specifier sequence)
    引言在阅读开源项目源代码是,发现了一个有趣且特殊的C++特性:属性。属性(attributespecifiersequences)是在C++11标准引入的。在C++11之前,编译器特有的扩展被广泛用来提供额外的代码信息。例如,GNU编译器(GCC)使用__attribute__来控制函数的行为。但是缺点也很明显,那就是这种方......
  • POJ3017 Cut the Sequence
    POJ3017CuttheSequence题目大意给定一个一个长度为\(N\)的序列\(A\),要求把该序列划分成若干段,其中每一段中的数的和不大于\(M\),现在需要使得每一段中数的最大值的和最小,求该最小值。\[0\leqn\leq10^5\\0\leqm\leq10^{11}\\0\leqa_i\leq10^6\]解题思路......
  • Leetcode 1143. Longest Common Subsequence
    ProblemGiventwostringstext1andtext2,returnthelengthoftheirlongestcommonsubsequence.Ifthereisnocommonsubsequence,return0.Asubsequenceofastringisanewstringgeneratedfromtheoriginalstringwithsomecharacters(canbenone......
  • Atcoder ABC091D Two Sequences
    首先根据\(\operatorname{xor}\),就想到拆成二进制的\(a_{i,w},b_{i,w}\)来处理。类似竖式加法,考虑把得到的结果\(c_{w}\)分为\(a_{i,w}+b_{j,w}+x\),其中\(x\)就是上一位的进位。进一步的,发现对于总的\(c_{w}\),\(a_{i,w},b_{j,w}\)肯定都在这个位置加了\(......
  • D. Invertible Bracket Sequences
    原题链接题解把(当作+1,)当作-1,我们可以得到这样的图像易得要保证翻完之后整体的合法性,\([l,r]\)内的左右括号数量要相等,在图上看就是\(pre[l-1]==pre[r]\)相等一个合法括号,要保证所有的\(pre[i]\)不小于0,因此反过来之后,最小的\(pre[i]\)等于\(pre[r]-\max(pre[k]),k\in......
  • 汽车电子-如何用Test Sequence做自动化测试
    汽车电子-如何用Test Sequence做自动化测试附赠自动驾驶最全的学习资料和量产经验:链接如何用来做自动化测试呢?创建一个测试序列点击模型右键Test Harness/Creat for左边选择Sequence通过Harness进行调试修改后可以保存到原来模型中双击点开表格,在里面填入输入......
  • square869120Contest #3 G Sum of Fibonacci Sequence
    洛谷传送门AtCoder传送门特判\(n=1\)。将\(n,m\)都减\(1\),答案即为\[[x^m]\frac{1}{(1-x-x^2)(1-x)^n}\]若能把这个分式拆成\(\frac{A(x)}{(1-x)^n}+\frac{B(x)}{1-x-x^2}\)的形式,其中\(\degA(x)\len-1,\degB(x)\le1\),那么答案就是好算的。......