首页 > 其他分享 >51nod-3976-最长序列

51nod-3976-最长序列

时间:2024-07-27 17:09:04浏览次数:18  
标签:51nod 3976 class.51 int Html LIS 序列

https://class.51nod.com/Html/Textbook/ChapterIndex.html#textbookId=126&chapterId=338

https://class.51nod.com/Html/Textbook/Problem.html#problemId=3976&textbookChapterId=725

LIS是符号只有大于或小于,所以这道题就是LIS问题。

状态设计同LIS,由于答案就是长度,所以就能知道是哪一种符号了。

多种符号,所以不能使用贪心优化。

但是可以使用树状数组求前缀max。

<的直接查询,>的反转大小,=的开个数组max即可。

不需要离散化。

image-20240727165246631

传递性,所以 \(9\) 可以替换成 \(11\),草率的感性的理解。

#include<iostream>
#include<algorithm>
using namespace std;
const int N=500010,M=1000010,L=M-9;
int n,k,a[N],f[N],same[M];
char s[N];
struct BIT{
	int c[M];
	void add(int x,int v){
		for(;x<L;x+=x&-x)c[x]=max(c[x],v);
	}
	int sum(int x){
		int res=0;
		for(;x;x-=x&-x)res=max(res,c[x]);
		return res;
	}
}le,ge;
int main(){
	#ifdef LOCAL
	freopen("1.txt","r",stdin);
	#endif
	#ifndef LOCAL
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	#endif
	cin>>n>>k;
	for(int i=1;i<=n;++i)cin>>a[i];
	for(int i=1;i<=k;++i)cin>>s[i];
	int ans=1;
	for(int i=1;i<=n;++i){
		int &sam=same[a[i]];
		ans=max(f[i]=max({le.sum(a[i]-1),ge.sum(L-a[i]-1),sam})+1,ans);
		char op=s[(f[i]-1)%k+1];
		if(op=='=')sam=max(sam,f[i]);
		else if(op=='<')le.add(a[i],f[i]);
		else ge.add(L-a[i],f[i]);
	}
	cout<<ans;
	return 0;
}

标签:51nod,3976,class.51,int,Html,LIS,序列
From: https://www.cnblogs.com/wscqwq/p/18327153

相关文章

  • 代码随想录算法训练营第48天 | 序列问题最终篇
    115.不同的子序列https://leetcode.cn/problems/distinct-subsequences/description/代码随想录https://programmercarl.com/0115.不同的子序列.html#算法公开课https://leetcode.cn/problems/delete-operation-for-two-strings/description/https://programmercarl.com/05......
  • 代码随想录||day25 非递减子序列,全排列问题
    491非递减子序列力扣题目链接题目描述:给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。示例1:输入:nums=......
  • leetcode105. 从前序与中序遍历序列构造二叉树,步骤详解附代码
    leetcode105.从前序与中序遍历序列构造二叉树给定两个整数数组preorder和inorder,其中preorder是二叉树的先序遍历,inorder是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例1:输入:preorder=[3,9,20,15,7],inorder=[9,3,15,20,7]输出:[3,9,20,nul......
  • 代码随想录算法训练营第47天 | 动态序列11:序列专题2
    代码随想录算法训练营第天|1143.最长公共子序列https://leetcode.cn/problems/longest-common-subsequence/description/代码随想录https://programmercarl.com/1143.最长公共子序列.html#算法公开课1035.不相交的线https://leetcode.cn/problems/uncrossed-lines/descrip......
  • Python数据分析案例55——基于LSTM结构自编码器的多变量时间序列异常值监测
    案例背景时间序列的异常值检测是方兴未艾的话题。比如很多单变量的,一条风速,一条用电量这种做时间序列异常值检测,想查看一下哪个时间点的用电量异常。多变量时间序列由不同变量随时间变化的序列组成,这些时间序列在实际应用中通常来自不同的传感器或数据源。多变量时间序列异......
  • 2-Python数据类型——序列
    Python数据类型——序列一、序列序列是一个可以存放多个值的容器。有序序列:在序列中每个值都有对应的下标下标:就相当于酒店的房间号,方便客人的查找与酒店的管理在编程中下标的起始值与日常生活中的计数有所不同:下标的计数从0开始计数,从左往右计数:下标从0开始往右递......
  • 【线性序列机-02】- 请求优先的线性序列机
    【线性序列机-02】-请求优先的线性序列机1.功能介绍在第一篇文章中介绍了不同线性序列机的分类,本篇文章将详细介绍其中的一种,请求优先的线性序列机。请求优先的线性序列机是一种在数字电路设计领域中具有独特性质和重要应用的概念或方法。其核心思想是,当计数器在计数过......
  • 51nod-基因匹配+luogu-【模板】最长公共子序列
    https://www.luogu.com.cn/problem/P1439https://class.51nod.com/Html/Textbook/ChapterIndex.html#textbookId=126&chapterId=338以上两个都是特例,一个是每个元素不重复,一个是每个元素均有5个。正确性说明参考:https://www.luogu.com.cn/article/1bcs9052由于一般情况可能出......
  • 【python基础02】 序列,元组,列表,字典,位运算
    python运算符位运算符&:按位与|:按位或^:按位异或~:按位取反<<:左移位>>:右移位x=0b11000110y=0b10100101print(bin(x&y))#0b0010print(bin(x|y))print(bin(x^y))print(bin(~x))#第一位是表示正负print(bin(x>>2))#去除右边两位print(bin(x<<2))#......
  • 数据结构 二叉树 前 中 后 序列
    简单二叉树的遍历如果看完还是不太懂就观看速成视频https://www.bilibili.com/video/BV1Ub4y147Zv/?spm_id_from=333.337.search-card.all.click&vd_source=e5f8765d50fb89ef04eb150bd76075b5引用资料文献链接放到篇尾简单术语解释节点(Node):二叉树中的一个元素,包含值和......