Codeforces Round #479 (Div. 3) F. Consecutive Subsequence (DP)
2024-10-19 04:46:13
题意:给你一个长度为\(n\)的序列,求一个最长的\({x,x+1,x+2,.....,x+k-1}\)的序列,输出它的长度以及每个数在原序列的位置.
题解:因为这题有个限定条件,最长序列是公差为\(1\)的单增序列,所以其实非常简单.
我们用\(map\)来记录每个元素最后出现的位置,\(dp\)表示当前位置的最长序列,\(last\)表示\(x-1\)的位置.
\(dp\)状态有两种更新方式: 1.如果上个元素\((x-1)\)存在,则\(dp[i]=dp[x-1]+1\).
2.\((x-1)\)不存在,则它自己就是首位置,\(dp[i]=1\).
之后找个最大值,然后输出每个位置就行了.
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include <unordered_set>
#include <unordered_map>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define me memset
const int N = 1e6 + 10;
const int mod = 1e9 + 7;
using namespace std;
typedef pair<int,int> PII;
typedef pair<long,long> PLL; int n;
int a[N];
int dp[N];
map<int,int> mp; int main() {
ios::sync_with_stdio(false);cin.tie(0);
cin>>n;
for(int i=1;i<=n;++i){
cin>>a[i];
int last=mp[a[i]-1];
if(last){
dp[i]=dp[last]+1;
}
else dp[i]=1;
mp[a[i]]=i;
} int len=0;
int last=0;
for(int i=1;i<=n;++i){
if(dp[i]>len){
len=dp[i];
last=a[i];
}
}
printf("%d\n",len);
int st=last-len+1;
for(int i=1;i<=n;++i){
if(a[i]==st){
printf("%d ",i);
st++;
}
} return 0;
}
最新文章
- 新手学跨域之iframe
- C++入门知识总结(1)
- ZOJ2604-DP
- PHP error_log() 函数
- process vs thread
- POJ1850 Code(组合+康托展开)
- [原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射
- OD: Heap Exploit : DWORD Shooting &; Opcode Injecting
- 韦根(Wiegand)数据传输格式
- python3.5 修改 IIS WEB.CONFIG的相关方法
- 关于OOCSS的一点思考
- eclipse: eclipse导入工程出现大红叹号
- centos6.5配置uwsgi与nginx支持django
- JSON:如果你愿意一层一层剥开我的心,你会发现...这里水很深——深入理解JSON
- C++ vector 使用笔记
- JMS学习(二)之ActiveMQ
- java mail qq邮箱配置 实例
- .net mvc Razor 三元运算判断赋值 ?:
- ExpressRoute 线路和路由域
- GUC-2 原子性
热门文章
- 2021升级版微服务教程7-OpenFeign实战开发和参数调优
- 【Jboss】A RESOURCE POOL IS PERMANENTLY BROKEN!
- SAP 中session和外部断点设置的区别
- STGAN: A Unified Selective Transfer Network for Arbitrary Image Attribute Editing 阅读笔记和pytorch代码解读
- 阅读lodash源码之旅数组方法篇-compact和concat
- vue-cli3x4x修改本地端口port
- guava eventbus 原理+源码分析
- kvm实战
- Vue基础之插值表达式的另一种用法!附加变量的监听!
- moco框架加入cookies