首先在开头加上-inf,结尾加上inf,最后答案减2即可。

设s[i]为i之前未知的个数,f[i]为以i结尾的LIS,且a[i]已知,那么:

f[i]=max(f[j]+min(s[i]-s[j],a[i]-a[j]-1))+1,其中j<i,a[j]<a[i]且a[j]已知

将min分类讨论后可转化为三维偏序,CDQ分治+扫描线+树状数组即可,时间复杂度$O(n\log^2n)$。

#include<cstdio>
#include<algorithm>
using std::sort;
const int N=100010,inf=1000000000;
char ch[5];
int n,m,i,a[N],s[N],b[N],c[N],B[N],C[N<<1],f[N],g[N];
int qa[N],qb[N],ca,cb,T,pos0[N],bit0[N],pos1[N<<1],bit1[N<<1];
inline int cmp(int x,int y){return a[x]<a[y];}
inline int lowerb(int x){
int l=1,r=m,mid,t;
while(l<=r)if(B[mid=(l+r)>>1]<=x)l=(t=mid)+1;else r=mid-1;
return t;
}
inline int lowerc(int x){
int l=1,r=n,mid,t;
while(l<=r)if(C[mid=(l+r)>>1]<=x)l=(t=mid)+1;else r=mid-1;
return t;
}
inline void up(int&a,int b){if(a<b)a=b;}
inline void add0(int x,int y){for(;x<=m;x+=x&-x)if(pos0[x]<T)pos0[x]=T,bit0[x]=y;else up(bit0[x],y);}
inline void ask0(int&t,int x){for(;x;x-=x&-x)if(pos0[x]==T)up(t,bit0[x]);}
inline void add1(int x,int y){for(;x<=n;x+=x&-x)if(pos1[x]<T)pos1[x]=T,bit1[x]=y;else up(bit1[x],y);}
inline void ask1(int&t,int x){for(;x;x-=x&-x)if(pos1[x]==T)up(t,bit1[x]);}
void solve(int l,int r){
if(l==r){
f[l]+=s[l]+1,g[l]+=a[l];
if(l==1)f[l]=1;
up(f[l],g[l]);
return;
}
int mid=(l+r)>>1;
solve(l,mid);
int i,j;
ca=cb=0;
for(i=l;i<=mid;i++)qa[ca++]=i;
for(i=r;i>mid;i--)qb[cb++]=i;
sort(qa,qa+ca,cmp),sort(qb,qb+cb,cmp);
for(T++,i=j=0;i<cb;i++){
while(j<ca&&a[qa[j]]<a[qb[i]]){
add0(b[qa[j]],f[qa[j]]-s[qa[j]]);
add1(lowerc(c[qa[j]]-1),f[qa[j]]-a[qa[j]]);
j++;
}
ask0(f[qb[i]],b[qb[i]]-1);
ask1(g[qb[i]],lowerc(c[qb[i]]));
}
solve(mid+1,r);
}
int main(){
scanf("%d",&n);
a[m=1]=-inf;
while(n--){
scanf("%s",ch);
if(ch[0]=='N')i++;else s[++m]=i,scanf("%d",&a[m]);
}
s[++m]=i,a[m]=inf;
for(n=0,i=1;i<=m;i++){
B[i]=b[i]=a[i]-s[i];
C[++n]=c[i]=s[i]-a[i];
C[++n]=c[i]-1;
f[i]=g[i]=-inf;
}
sort(B+1,B+m+1),sort(C+1,C+n+1);
for(i=1;i<=m;i++)b[i]=lowerb(b[i]);
solve(1,m);
return printf("%d",f[m]-2),0;
}

  

BZOJ4282 : 慎二的随机数列的更多相关文章

  1. [BZOJ5427]最长上升子序列/[BZOJ4282]慎二的随机数列

    [BZOJ5427]最长上升子序列/[BZOJ4282]慎二的随机数列 题目大意: 给你一个长度为\(n(n\le10^5)\)的整数序列,其中有一些数已经模糊不清了,现在请你任意确定这些整数的值,使 ...

  2. [bzoj4282]慎二的随机数列_动态规划_贪心

    慎二的随机数列 bzoj-4282 题目大意:一个序列,序列上有一些数是给定的,而有一些位置上的数可以任意选择.问最长上升子序列. 注释:$1\le n\le 10^5$. 想法:结论:逢N必选.N是 ...

  3. bzoj4282慎二的随机数列

    海带头又上线了QwQ~ 这是一个奇怪的lis问题 显然一定存在一种最优答案使所有辨认不清的数都在答案中. [为什么呢]因为你完全可以用一个'N'来替换一个'K'啊QwQ~ 那么在选完所有'N'之后,一 ...

  4. bzoj4282 慎二的随机数列 树状数组求LIS + 构造

    首先,我们不难发现N个位置都选一定不会比少选任意几个差,所以我们就先设定我们将这N个修改机会都用上, 那么如果点 i">ii 前有sumv">sumvsumv个可修改点 ...

  5. 【BZOJ4282】慎二的随机数列 乱搞

    [BZOJ4282]慎二的随机数列 Description 间桐慎二是间桐家著名的废柴,有一天,他在学校随机了一组随机数列, 准备使用他那强大的人工智能求出其最长上升子序列,但是天有不测风云,人有旦夕 ...

  6. 【bzoj4282】慎二的随机数列

    扯几句题外的,最近在看Fate/StayNight,对此人毫无好感…… 每次减一下当前可辨认数,然后随意dp一个LIS,最后记得加回去就好. #include<bits/stdc++.h> ...

  7. BZOJ 4282(慎二的随机数列

    题解: 网上题解还没看 我的方法是用平衡树维护一个单调栈 由于N用了一定是赚的 所以它的作用是让f[i+1]=f[i]+1 这个是可以记录的 就跟noip蚯蚓那题一样 然后插入一个值的时候查询前面的最 ...

  8. js生成随机数、随机数列、数值转金融格式

    随机数的生成:min到max之间,包括两者自身 parseInt(Math.random()*(max-min+1)+min,10); Math.floor(Math.random()*(max-mi ...

  9. 给定随机数列求第k大的数字

    原来STL我还是有很多不知道的地方 STL 采用的算法是: 当数组长度 <= 3时, 采用插入排序. 当长度 > 3时, 采用快排 Partition 的思想,也就是说类似快速排序(这里不 ...

随机推荐

  1. [BZOJ1786][BZOJ1831]逆序对

    [BZOJ1786][BZOJ1831]逆序对 试题描述 输入 输出 输入示例 - - 输出示例 数据规模及约定 见“输入” 题解 首先这题有一个性质,即,填的数从左到右一定不降.证明不妨读者自己yy ...

  2. Java--多线程读取网络图片并保存在本地

    本例用到了多线程.时间函数.网络流.文件读写.正则表达式(在读取html内容response时,最好不要用正则表达式来抓捕html文本内容里的特征,因为服务器返回的多个页面的文本内容不一定使用相同的模 ...

  3. Objective-C中的instancetype和id区别

    目录(?)[-] 有一个相同两个不同相同 Written by Mattt Thompson on Dec 10th 2012 一什么是instancetype 二关联返回类型related resu ...

  4. jquery博客收集的IE6中CSS常见BUG全集及解决方案

    今天的样式调的纠结,一会这边一会那么把jquery博客折腾的头大,浏览器兼容性.晚上闲着收集一些常见IE6中的BUG 3像素问题及解决办法 当使用float浮动容器后,在IE6下会产生3px的空隙,有 ...

  5. FastCgi与PHP-fpm之间是个什么样的关系

    刚开始对这个问题我也挺纠结的,看了<HTTP权威指南>后,感觉清晰了不少. 首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. ...

  6. spring事物传播属性

    PROPAGATION_REQUIRED Support a current transaction; create a new one if none exists.  支持一个当前事务;如果不存在 ...

  7. 【leetcode】Interleaving String

    Interleaving String Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. Fo ...

  8. 【转】实战 SSH 端口转发

    本文转自:http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html,至于有什么用,懂的懂! 实战 SSH 端口转发 通 ...

  9. iOS7 中的statusbar的隐藏和样式更改

    ios7以前,如果想要隐藏statusbar,需要用到[UIApplicationsharedApplication].statusBarHidden = YES; 或者在plist文件中设定Stat ...

  10. php-fpm 进程管理

    2015年2月26日 15:40:15 先查找 PHP-FPM 的进程号 ps -ef | grep php-fpm root Feb12 ? :: php-fpm: master process ( ...