
【洛谷_CF261D】Maxim and Increasing Subsequence
发布日期:2021-05-06 16:00:34
浏览次数:12
分类:技术文章
本文共 932 字,大约阅读时间需要 3 分钟。
Maxim and Increasing Subsequence
题目大意:(原文为英文,以下为大意内容)
给定一个序列,重复 t 遍后求最长上升子序列(严格单调)
给定 k 组数据 ,每组数据有相同的 n ,maxb 和 t 。分别表示元素的个数、元素中最大的数和重复几遍
样例输入
3 3 5 23 2 11 2 32 3 1
样例输出
233
解题思路
如果序列中不同的元素小于等于重复的次数( t ),那么答案就是不同元素的个数( sum )。
如果不大于重复的次数( t ),那么我们用 f[i][j] 表示当前序列的最长子序列,但是我们要开滚动数组。我们可以用树状数组维护这个最长上升子序列,那么程序就出来了:
#include#include using namespace std;int k,n,maxb,t,sum;int a[100010],b[2000010];int f[100010],tree[100010];void change(int x,int y){ for(;x<=maxb;x+=x&(-x)) tree[x]=max(tree[x],y);}int find(int x){ int ans=0; for(;x;x-=x&(-x)) ans=max(ans,tree[x]); return ans;}int main(){ cin>>k>>n>>maxb>>t; while(k--) { sum=0; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); if(b[a[i]]!=k+1) sum++; b[a[i]]=k+1; } if(t>=sum) { cout< < f[j]) { f[j]=x; ans=max(ans,x); change(a[j],x); } if(ans>=sum) break; } cout< <
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年03月25日 21时12分18秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
jQuery练习t309,从0到1
2019-03-03
jQuery练习t310,从0到1
2019-03-03
asp.net 4.5 练习~test4-10
2019-03-03
asp.net 4.5 练习~test5-6
2019-03-03
asp.net 4.5 练习~test14-5 写文件
2019-03-03
asp.net 4.5 练习~test15-1 xml文件使用xslt转换格式
2019-03-03
asp.net代码练习 work014 ClientScript属性
2019-03-03
asp.net代码练习 work015 回调技术
2019-03-03
asp.net代码练习 work016 fileupload文件上传
2019-03-03
asp.net代码练习 work021 DataReader的使用
2019-03-03
JavaScript基础-form表单验证
2019-03-03
PHP基础-变量的作用范围
2019-03-03
PHP基础-类的静态变量的读取
2019-03-03
PHP7.0--如何使用函数的引用
2019-03-03
天干地支年份算法的猜想(虾米大王)
2019-03-03
Java基础--01--数据类型/方法/数组
2019-03-03
【JokerのZYNQ7020】LINUX_EMIO_LED。
2019-03-03
【JokerのZYNQ7020】LINUX_EMIO_BUTTON。
2019-03-03
将代码从windows移动linux上出现^M错误的解决方法
2019-03-03
AC自动机的使用案例
2019-03-03