首页 > 代码库 > Codeforces 474E Pillars(论数据的重要性)
Codeforces 474E Pillars(论数据的重要性)
今天做到这道题,一看是一道很水的最长不下降序列吧,但是数据超级大,怎么办,突发奇想,因为每一次都要和前面比,那么需要从第一个状态推现在的状态,那么有数据比较水,也许前面的600个状态就可一推理到,那么直接从他的钱600个状态推就水过了
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; typedef long long int ll; const int N=100100; int n,K; ll h[N],sum[N],path[N],ans[N]; int main() { cin>>n>>K; sum[1]=1; int maxl=1; for(int i=1;i<=n;i++) { cin>>h[i]; sum[i]=1; for(int j=max(1,i-600);j<i;j++) { if(abs(h[j]-h[i])>=K&&sum[j]+1>sum[i]) { sum[i]=sum[j]+1; path[i]=j;//下一个是j } if(sum[i]>sum[maxl]) { maxl=i; } } } cout<<sum[maxl]<<endl; int T=path[maxl]; int cnt=0; ans[cnt]=maxl; while(T) { ans[++cnt]=T; T=path[T]; } for(int i=cnt;i>=0;i--){ cout<<ans[i]<<" "; } return 0; }
Codeforces 474E Pillars(论数据的重要性)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。