51nod 1218 最长递增子序列 V2——LIS+思路(套路)
题目: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+思路(套路)的更多相关文章
- [51Nod 1218] 最长递增子序列 V2 (LIS)
传送门 Description 数组A包含N个整数.设S为A的子序列且S中的元素是递增的,则S为A的递增子序列.如果S的长度是所有递增子序列中最长的,则称S为A的最长递增子序列(LIS).A的LIS可 ...
- 51nod 1218 最长递增子序列 V2(dp + 思维)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1218 题解:先要确定这些点是不是属于最长递增序列然后再确定这 ...
- [51Nod] 1218 最长递增子序列 V2
如何判断一个元素是否一定在LIS中?设f[i]为以ai结尾的LIS长度,g[i]为以ai开头的LIS长度,若f[i]+g[i]-1==总LIS,那么i就一定在LIS中出现 显然只出现一次的元素一定是必 ...
- 51nod 1218 最长递增子序列 | 思维题
51nod 1218 最长递增子序列 题面 给出一个序列,求哪些元素可能在某条最长上升子序列中,哪些元素一定在所有最长上升子序列中. 题解 YJY大嫂教导我们,如果以一个元素结尾的LIS长度 + 以它 ...
- 51Nod 1376 最长递增子序列的数量 —— LIS、线段树
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1376 1376 最长递增子序列的数量 基准时间限制:1 秒 空 ...
- 51nod 1376 最长递增子序列的数量(线段树)
51nod 1376 最长递增子序列的数量 数组A包含N个整数(可能包含相同的值).设S为A的子序列且S中的元素是递增的,则S为A的递增子序列.如果S的长度是所有递增子序列中最长的,则称S为A的最长递 ...
- 51nod 1134 最长递增子序列
题目链接:51nod 1134 最长递增子序列 #include<cstdio> #include<cstring> #include<algorithm> usi ...
- 最长递增子序列(LIS)(转)
最长递增子序列(LIS) 本博文转自作者:Yx.Ac 文章来源:勇幸|Thinking (http://www.ahathinking.com) --- 最长递增子序列又叫做最长上升子序列 ...
- 最长公共子序列(LCS)、最长递增子序列(LIS)、最长递增公共子序列(LICS)
最长公共子序列(LCS) [问题] 求两字符序列的最长公共字符子序列 问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字 ...
随机推荐
- 【selenium+python】自动化测试目录与文件结构
一.首先,看一下完整的项目目录结构图,如下: ==================目录结构================== ==================目录结构============== ...
- pooler 连接池中报错" error_no_members"
连接池驱动,pooler 在使用中会报错" error_no_members" 分析:可能有以下3个地方对其有影响: 1)member 可能没回收: 2)wait_for_p ...
- 22 nginx配置与集群
一:编译nginx ,并配置 Cd /app/pcre-8.12 ./configure Make && make install Cd nginx-1.2.7 ./configure ...
- 【转】android 签名验证防止重打包
网上资料很多,这里只做一个笔记反编译 dex 修改重新打包签名后 apk 的签名信息肯定会改变,所以可以在代码中判断签名信息是否被改变过,如果签名不一致就退出程序,以防止 apk 被重新打包. 1 j ...
- GC入门指南(二)------GC工作原理
本系列博客旨在帮助大家理解java垃圾收集器及其工作原理,这是系列的第二篇. java垃圾回收事实上是由一个能够进行自己主动内存管理的进程完毕的,这使得程序猿在写代码的时候不必过多考虑内存释放与回收的 ...
- 宇视摄像机RTSP地址格式规则
rtsp://{用户名}:{密码}@{ip}:{port}/video1/2/3,分别对应主/辅/三码流: 比如: rtsp://admin:admin@192.168.8.8:554/video1, ...
- 九度OJ 1004:Median
#include <stdio.h> #include <stdlib.h> #include <limits.h> #define N 1000000 int a ...
- Open-sourcing LogDevice, a distributed data store for sequential data
https://logdevice.io/blog/2018/09/12/open-sourcing-announcement.html September 12, 2018 We are exc ...
- Brotli
https://engineering.linkedin.com/blog/2017/05/boosting-site-speed-using-brotli-compression?utm_sourc ...
- Bootstrap aggregating Bagging 合奏 Ensemble Neural Network
zh.wikipedia.org/wiki/Bagging算法 Bagging算法 (英语:Bootstrap aggregating,引导聚集算法),又称装袋算法,是机器学习领域的一种团体学习算法. ...