AtCoder Regular Contest 133 B - Dividing Subsequence 复杂版LIS最长上升子序列

B - Dividing Subsequence

目录

题意:

思路:

代码:


题意:

数组a和数组b,找出最长公共子序列,使得每个b[ i ] 都是 a[ i ]的倍数。

思路:

AtCoder Regular Contest 133 B(最长上升子序列) C(思维) - 知乎

这种题应把问题转化,把 要找的 和 找的条件 给分离了 。

示例:

1926890361c544db8e75af4f031cf9ba.png

我们给第二个数组的每个数开个vector,用来存在第一个数组中可以配对的数的下标,也就是上图。

通过遍历第一个数组,并将下标push给自己倍数的在第二个数组位置的vector来完成的。

此步只完成“配对”。

然后遍历第二个数组,并让配对的下标升序即可。

(在第二个数组中挑几个 —— 第二个数组的子序列。

然后这几个的配对也是顺序 —— 第一个数组的子序列

配对 —— 满足条件)

代码:


#define ll long long
#define endl "\n"
//#define int long long


const int maxn = 5e5 + 5;
int n = 1e5;
int arr1[maxn], id[maxn],ans[maxn];
vector<int>g[maxn];
void solve()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> arr1[i];
	for (int i = 0; i < n; i++)
	{
		int tmp;
		cin >> tmp;
		id[tmp] = i;//记录这个数tmp在数组2的下标
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = arr1[i]; j <= n; j+=arr1[i])
		{
			//给我们的倍数 我们的下标
			g[id[j]].push_back(i);
		}
	}

	//lis
	ans[0] = -1;
	int len = 0;
	for (int i = 0; i < n; i++)
	{
		reverse(g[i].begin(), g[i].end());
		for (int j = 0; j < g[i].size(); j++)
		{
			int aim = g[i][j];
			if (aim > ans[len])
			{
				ans[++len] = aim;//""
			}
			else
			{
				//找第一个比他大的
				int l = 1, r = len;
				while (l < r)
				{
					int m = l + (r - l) / 2;
					if (ans[m] >= aim)
						r = m;
					else l = m+1;
				}
				if (ans[r] > aim)
					ans[r] = aim;
			}
		}
	}

	cout << len << endl;

}
signed main()
{
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	int t = 1;
	//cin >> t;
	while (t--)
	{
		solve();
	}
	return 0;
}

相关推荐

  1. 上升序列模板(LIS

    2024-03-27 22:44:02       27 阅读
  2. B3637 上升序列

    2024-03-27 22:44:02       36 阅读
  3. 上升序列(递增序列,LIS)

    2024-03-27 22:44:02       25 阅读
  4. 从一道板子题了解LIS(上升序列)

    2024-03-27 22:44:02       67 阅读
  5. 备战蓝桥杯 Day8(上升序列LIS模型)

    2024-03-27 22:44:02       30 阅读
  6. 备战蓝桥杯---上升序列LIS)模板

    2024-03-27 22:44:02       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-27 22:44:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-27 22:44:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-27 22:44:02       87 阅读
  4. Python语言-面向对象

    2024-03-27 22:44:02       96 阅读

热门阅读

  1. C++中拷贝对象时编译器做出的一些优化

    2024-03-27 22:44:02       43 阅读
  2. glob模块篇

    2024-03-27 22:44:02       36 阅读
  3. 图论—树的直径(树形DP、BFS)

    2024-03-27 22:44:02       40 阅读
  4. 领域特定语言在量化交易中的设计及应用

    2024-03-27 22:44:02       35 阅读
  5. VC++ build Tools下载地址

    2024-03-27 22:44:02       37 阅读
  6. #1. 乘法竖式

    2024-03-27 22:44:02       36 阅读
  7. Python学习之-顺序结构-入求多边形面积

    2024-03-27 22:44:02       29 阅读
  8. 类,并快乐着---python中的类

    2024-03-27 22:44:02       37 阅读
  9. 动态规划——买卖股票C++

    2024-03-27 22:44:02       43 阅读
  10. 深度学习(23):SmoothL1Loss损失函数

    2024-03-27 22:44:02       31 阅读
  11. 使用GO语言验证证书的有效期

    2024-03-27 22:44:02       37 阅读
  12. 免费身份证实名认证接口|PHP开发示例调用

    2024-03-27 22:44:02       46 阅读