B. CopyCopyCopyCopyCopy
题目大意
有一个长度为n的数组a,有一个由n个数组a构成的新数组,求新数组最长递增子序列的长度
子序列:如果序列A可以通过删除几个(可能是零个或全部)元素从B中获得,则序列A是序列B的子序列
解题思路
- 可以从新序列第一段中取一个最小的元素,第二段中取一个第二小的元素,以此类推,所以计算数组a中不同元素的个数即可
- 可以用set容器储存元素,因为set中不含有相同的元素,所以最后输出set的大小即可
- 具体操作见代码
附上代码
#include<bits/stdc++.h>
#define int long long
#define lowbit(x) (x &(-x))
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
const double eps=1e-10;
const int M=1e9+7;
const int N=1e5+5;
typedef long long ll;
typedef pair<int,int> PII;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int t;
cin>>t;
while(t--){
int n;
cin>>n;
set<int> s;
for(int i=1;i<=n;i++){
int a;
cin>>a;
s.insert(a);
}
cout<<s.size()<<endl;
}
return 0;
}
本文介绍了一种求解由相同数组重复构成的新数组的最长递增子序列问题的方法。通过使用set容器来存储数组中的不同元素,最终输出set的大小即为所求的最长递增子序列的长度。


452

被折叠的 条评论
为什么被折叠?



