Codeforces 474E Pillars(论数据的重要性)

来源:互联网 发布:科比2003年总决赛数据 编辑:程序博客网 时间:2024/05/22 00:15

  今天做到这道题,一看是一道很水的最长不下降序列吧,但是数据超级大,怎么办,突发奇想,因为每一次都要和前面比,那么需要从第一个状态推现在的状态,那么有数据比较水,也许前面的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;}

1 0