题目: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. Gmail上不去怎么办?

    近期非常多人反映Gmail上不去.每到重大政治事件附近,国家的防火墙就会加固一些. 事实上仅仅要下一个软件就能够轻松解决Google.Gmail上不去的问题. 下载地址 下载解压后点击"我要 ...

  2. centOS下安装ejabberd

    #centos (安装依赖项) sudo yum -y groupinstall "Development Tools"sudo yum -y install openssl op ...

  3. [Linux] 网络

    如何在网络中标识一台计算机 IP 多个程序如何不冲突 通信端口 不同的计算机如何通信 协议 IP A类:0+7位网络号+24位主机号,可用网络2^7-2个,每个网络可容纳2^24-2个主机 B类:10 ...

  4. 深入Asyncio(八)异步迭代器

    Async Iterators: async for 除了async def和await语法外,还有一些其它的语法,本章学习异步版的for循环与迭代器,不难理解,普通迭代器是通过__iter__和__ ...

  5. SPOJ SUBLEX - Lexicographical Substring Search 后缀自动机 / 后缀数组

    SUBLEX - Lexicographical Substring Search Little Daniel loves to play with strings! He always finds ...

  6. curl post 请求 es 数据 REST 批量删除

    curl  -d  "keyword=牛" http://api.com/path/index curl模拟http发送get或post接口测试 - 一生守候 - 博客园 http ...

  7. javac 编译源文件出现"java:1: 需要为 class、interface 或 enum"、" [javac] 锘縫"错误

    [javac] HelloWorld.java:1: 需要为 class.interface 或 enum [javac] 锘縫ackage com.csdn.demo; [javac] ^ [jav ...

  8. ABAP 设置单元格颜色

    http://blog.163.com/ronanchen@126/blog/static/172254750201161811040488/ http://blog.csdn.net/lhx20/a ...

  9. Android Development Note-01

    Eclipse快捷键: 导包:ctrl+alt+o 格式化代码:ctrl+alt+f   MVC: M——Model V——View C——Control   android程序界面如何设计.调试 U ...

  10. 关于Spring注解 @Service @Component @Controller @Repository 用法

    @Component 相当于实例化类的对象,其他三个注解可以理解为@Component的子注解或细化. 在annotaion配置注解中用@Component来表示一个通用注释用于说明一个类是一个spr ...