题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1218

自己怎么连这种 喜闻乐见的大水题 都做不出来了……

好像见过的套路,就是求每个位置到它为止的LIS和从它开始的LIS,最后拼起来是ans+1的就在LIS上。

然后试图通过方案数来判断经过该位置的LIS有多少,以判断该位置是不是唯一的。

WA了一次后发现自己的树状数组传参没有-1,求成非严格的了。

还是WA了后面的点。给方案数开了long long后多A了几个点,但还是不能AC。尝试取模,通过的点数和没开long long一样。

然后去看题解。

……

原来只要稍加分析就能得出可从长度的唯一性来判断。自己还是思考太少,动手太匆忙……

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=5e4+,fx=,mod=;
int n,m,a[N],tp[N],f[N],len[N],cd[N],ans,cnt[N];
//int g[N],p[N],c[N],prn;
int rdn()
{
int ret=,fx=; char ch=getchar();
while(ch>''||ch<''){if(ch=='-') fx=-; ch=getchar();}
while(ch>=''&&ch<='') ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return ret*fx;
}
void upd(int &x){x-=(x>=mod?mod:);}
void query(int x,int &l/*,int &k*/)
{
for(;x>+fx;x-=(x&-x))
{
if(f[x]>l)
{
l=f[x];
// k=g[x];
}
// else if(f[x]==l) k+=g[x],upd(k);
}
}
void add(int x,int l/*,int k*/)
{
for(;x<=m+fx;x+=(x&-x))
{
if(l>f[x])
{
f[x]=l;
// g[x]=k;
}
// else if(l==f[x]) g[x]+=k,upd(g[x]);
}
}
int main()
{
n=rdn();
for(int i=;i<=n;i++) a[i]=tp[i]=rdn();
sort(tp+,tp+n+); m=unique(tp+,tp+n+)-tp-;
for(int i=;i<=n;i++) a[i]=lower_bound(tp+,tp+n+,a[i])-tp;
for(int i=n;i;i--)
{
query(m-a[i]+fx,len[i]/*,p[i]*/);//not +1 for yan ge
// if(!len[i]) p[i]=1;
len[i]++;
add(m-a[i]++fx,len[i]/*,p[i]*/);
if(len[i]>ans){ans=len[i];/*prn=p[i];*/}
// else if(len[i]==ans) prn+=p[i],upd(prn);
}
memset(f,,sizeof f);
// memset(g,0,sizeof g);
for(int i=;i<=n;i++)
{
query(a[i]-+fx,cd[i]/*,c[i]*/);//a[i]-1!!!
// if(!cd[i]) c[i]=1;
cd[i]++;
if(len[i]+cd[i]==ans+)cnt[cd[i]]++;
add(a[i]+fx,cd[i]/*,c[i]*/);
}
printf("A:");
for(int i=;i<=n;i++)
if(len[i]+cd[i]==ans+&&cnt[cd[i]]>/*&&(ll)p[i]*c[i]%mod<prn*/)
printf("%d ",i);
printf("\n");
printf("B:");
for(int i=;i<=n;i++)
if(len[i]+cd[i]==ans+&&cnt[cd[i]]==/*&&(ll)p[i]*c[i]%mod==prn*/)
printf("%d ",i);
printf("\n");
return ;
}

51nod 1218 最长递增子序列 V2——LIS+思路(套路)的更多相关文章

  1. [51Nod 1218] 最长递增子序列 V2 (LIS)

    传送门 Description 数组A包含N个整数.设S为A的子序列且S中的元素是递增的,则S为A的递增子序列.如果S的长度是所有递增子序列中最长的,则称S为A的最长递增子序列(LIS).A的LIS可 ...

  2. 51nod 1218 最长递增子序列 V2(dp + 思维)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1218 题解:先要确定这些点是不是属于最长递增序列然后再确定这 ...

  3. [51Nod] 1218 最长递增子序列 V2

    如何判断一个元素是否一定在LIS中?设f[i]为以ai结尾的LIS长度,g[i]为以ai开头的LIS长度,若f[i]+g[i]-1==总LIS,那么i就一定在LIS中出现 显然只出现一次的元素一定是必 ...

  4. 51nod 1218 最长递增子序列 | 思维题

    51nod 1218 最长递增子序列 题面 给出一个序列,求哪些元素可能在某条最长上升子序列中,哪些元素一定在所有最长上升子序列中. 题解 YJY大嫂教导我们,如果以一个元素结尾的LIS长度 + 以它 ...

  5. 51Nod 1376 最长递增子序列的数量 —— LIS、线段树

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1376 1376 最长递增子序列的数量 基准时间限制:1 秒 空 ...

  6. 51nod 1376 最长递增子序列的数量(线段树)

    51nod 1376 最长递增子序列的数量 数组A包含N个整数(可能包含相同的值).设S为A的子序列且S中的元素是递增的,则S为A的递增子序列.如果S的长度是所有递增子序列中最长的,则称S为A的最长递 ...

  7. 51nod 1134 最长递增子序列

    题目链接:51nod 1134 最长递增子序列 #include<cstdio> #include<cstring> #include<algorithm> usi ...

  8. 最长递增子序列(LIS)(转)

    最长递增子序列(LIS)   本博文转自作者:Yx.Ac   文章来源:勇幸|Thinking (http://www.ahathinking.com)   --- 最长递增子序列又叫做最长上升子序列 ...

  9. 最长公共子序列(LCS)、最长递增子序列(LIS)、最长递增公共子序列(LICS)

    最长公共子序列(LCS) [问题] 求两字符序列的最长公共字符子序列 问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字 ...

随机推荐

  1. Hibernate demo之使用注解

    1.新建maven项目 testHibernate,pom.xml <?xml version="1.0" encoding="UTF-8"?> & ...

  2. 非spring托管的类使用spring脱管的类。

    import org.springframework.beans.BeansException; import org.springframework.context.ApplicationConte ...

  3. rtems 4.11 部分m4文件分析

    本来想把configure.ac和各种m4文件分析明白,发现有点困难,不过好在也能理解一些. 基本教程 首先要明白m4,参见这个教程,写得不错,不论怎么样m4替换来替换去的,还真是不那么容易懂,好在我 ...

  4. 时间控件(DateTime Picker)

    中文:http://www.bootcss.com/p/bootstrap-datetimepicker/index.htm http://www.malot.fr/bootstrap-datetim ...

  5. erlang和golang的比较

    1)垃圾回收GC 像 Java 一样,Go 的垃圾回收是全局的,这意味着一旦垃圾回收被触发,所有的 goroutine 都会被暂停,造成一段时间的业务延迟. Erlang 的垃圾回收是进程级别的,每一 ...

  6. [转]XMPP基本概念--节(stanza)

    本文介绍在XMPP通信中最核心的三个XML节(stanza).这些节(stanza)有自己的作用和目标,通过组织不同的节(stanza),就能达到我们各种各样的通信目的. 首先我们来看一段XMPP流. ...

  7. 删除rabbitmq的队列和队列中的数据

      访问http://{rabbitmq安装IP}:15672,帐号guest,密码guest(也可以使用自己创建的帐号). 登录后访问http://{rabbitmq安装IP}:15672/#/qu ...

  8. 16 nginx实现负载均衡

    一:nginx实现负载均衡-----------------原理-------------------------- (1) 反向代理后端如果有多台服务器,自然可形成负载均衡,但proxy_pass如 ...

  9. android 用webView作为编辑器 各种问题

    1.首先我要说明一下为什么要写这个博客,因为公司最近需要一个自定义的编辑器,苦于没有思路在网上找了好久,看到了好多android实现的编辑器(其实也就那么几个并不多),公司需求和网页端同步共享创建的文 ...

  10. UITableView使用指南

    本文转载至 http://blog.csdn.net/yu0089/article/details/8227402 一.概述 UITableView是iOS开发比不可少也是最重要的一个控件类.可以说任 ...