题目: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. android利用apkplug框架实现主应用与插件通讯(传递随意对象)实现UI替换

    时光匆匆,乍一看已半年过去了,经过这半年的埋头苦干今天最终有满血复活了. 利用apkplug框架实现动态替换宿主Activity中的UI元素.以达到不用更新应用就能够更换UI样式的目的. 先看效果图: ...

  2. 安卓ADT离线安装

    http://jingyan.baidu.com/article/3aed632e66858770108091bf.html

  3. zeroMQ研究(转)

    偶尔一个机会,了解了下zeroMQ消息队列. 1  ZeroMQ概述 ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型.连接处理.帧.甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接 ...

  4. 深入Asyncio(五)Event Loop

    Event Loop loop除了处理协程间的切换与结束时的异常捕捉,还要监听socket和文件描述符.先做个小测试: >>> import asyncio >>> ...

  5. Docker入门系列5:常见问题小结

    重启容器 再次运行容器: docker start container_id 然后 docker attach container_id 就可以继续下命令了. [编辑]命名 --name [编辑]端口 ...

  6. Android 事件分发机制 图解

    在Android 开发中事件分发是比较重要的,也是比较难理解的,之前看过这方面的东西,以为自己弄懂了,也就没太注意,最近面试呢,想着肯定要问到这一块的东西,回顾的时候发现又忘了,真是好记性不如烂笔头啊 ...

  7. TP框架---thinkphp使用ajax

    thinkphp使用ajax和之前使用ajax的方法一样,不同点在于之前的ajax中的url指向了一个页面,而thinkphp里面的url需要指向一个操作方法. 一.thinkphp使用ajax返回数 ...

  8. WebService 简单应用

    Web服务全称:XML Web Service,是一种可编程的应用程序逻辑组件,它可以在Internet或企业网的Web应用程序之间共享.Web服务被设计成能够通过Internet与其它应用程序之间直 ...

  9. sql server charindex函数和patindex函数详解(转)

    charindex和patindex函数常常用来在一段字符中搜索字符或字符串.假如被搜索的字符中包含有要搜索的字符,那么这两个函数返回一个非零的整数,这个整数是要搜索的字符在被搜索的字符中的开始位数. ...

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

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