首先,我们不难发现N个位置都选一定不会比少选任意几个差,所以我们就先设定我们将这N个修改机会都用上, 那么如果点 i">ii 前有sumv">sumvsumv个可修改点要被选的话,当前点被选择的条件是减掉sumv">sumvsumv后依然能和前面已减掉过sumv">sumvsumv的进行匹配。

Code:

#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 100000 + 4;
int p, maxv[maxn], tags[maxn], nums[maxn], val[maxn];
inline int lowbit(int t)
{
return t & (-t);
}
inline void update(int x,int delta)
{
while(x <= p + 2)
maxv[x] = max(maxv[x], delta), x += lowbit(x);
}
inline int query(int x)
{
int ans = 0;
while(x > 0) ans = max(ans, maxv[x]) , x -= lowbit(x);
return ans;
}
int main()
{
freopen("calligraphy9.in","r",stdin);
//freopen("calligraphy.","w",stdout);
int n, cnt = 0, sumv = 0, ans = 0, fin = 0;
scanf("%d",&n);
for(int i = 1;i <= n; ++i)
{
char g[10];
scanf("%s",g);
if(g[0] == 'N')
{
tags[i] = 1;
++sumv;
continue;
}
scanf("%d",&val[i]);
}
ans = sumv;
for(int i = n;i >= 1;--i)
{
if(tags[i]) --sumv;
else val[i] -= sumv;
}
for(int i = 1;i <= n; ++i)if(!tags[i]) nums[++cnt] = val[i];
sort(nums + 1, nums + 1 + cnt);
for(int i = 1;i <= n; ++i)
if(!tags[i])
{
val[i] = lower_bound(nums + 1, nums + 1 + cnt, val[i]) - nums;
p = max(p, val[i]);
}
for(int i = 1;i <= n; ++i)
{
if(tags[i]) continue;
int u = val[i];
int pre = query(u - 1);
fin = max(fin, pre + 1);
update(u, pre + 1);
}
printf("%d",ans + fin);
fclose(stdin);
return 0;
}

bzoj4282 慎二的随机数列 树状数组求LIS + 构造的更多相关文章

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

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

  2. HDU1087(树状数组求LIS)

    题是水题,学习一下用树状数组求LIS. 先离散化一下,注意去重:然后就把a[i]作为下标,dp[i]作为值,max作为维护的运算插进树状数组即可. 如果是上升子序列,询问(a[i] - 1):如果是不 ...

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

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

  4. BZOJ4282 : 慎二的随机数列

    首先在开头加上-inf,结尾加上inf,最后答案减2即可. 设s[i]为i之前未知的个数,f[i]为以i结尾的LIS,且a[i]已知,那么: f[i]=max(f[j]+min(s[i]-s[j],a ...

  5. Codeforces 486E LIS of Sequence --树状数组求LIS

    题意: 一个序列可能有多个最长子序列,现在问每个元素是以下三个种类的哪一类: 1.不属于任何一个最长子序列 2.属于其中某些但不是全部最长子序列 3.属于全部最长子序列 解法: 我们先求出dp1[i] ...

  6. poj1631——树状数组求LIS

    题目:http://poj.org/problem?id=1631 求LIS即可,我使用了树状数组. 代码如下: #include<iostream> #include<cstdio ...

  7. 树状数组求LIS

    我真的是咸鱼啊 多少年前的基础了我竟然才弄明白,哭 用树状数组维护<=x的最上上升子序列的最大值即可啊Orz 我真的菜的一笔啊! #include <bits/stdc++.h> u ...

  8. bzoj4282慎二的随机数列

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

  9. 树状数组求LIS模板

    如果数组元素较大,需要离散化. #include <iostream> #include <cstdio> #include <cstring> #include ...

随机推荐

  1. LaTeX的简单使用方法

    先来一个总结得比较好的https://blog.csdn.net/garfielder007/article/details/51646604 1.普通公式 $公式不换行$ $公式不换行$ $$公式独 ...

  2. 转载 - kmp next函数 kmp的周期问题,深入了解kmp中next的原理

    出处:http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html kmp next函数 kmp的周期问题,深入了解kmp中next的原理 ...

  3. 非form表单提交的数据就要用@requestbody注解获取http传过来的值,尤其json

    非form表单提交的数据就要用@requestbody注解获取http传过来的值,尤其json

  4. /sys/power/state

    kernel/power/main.c中: /** * state - control system power state. * * show() returns what states are s ...

  5. POJ 3080 Blue Jeans (后缀数组)

    题目大意: 求出这些DNA序列中的最长且字典序最小的公共子串. 思路分析: 二分长度的答案,去height中扫描这个长度是否满足,一旦满足就立即输出.这样就能够保证字典序最小了. #include & ...

  6. 【cl】cmd相关命令

    cd  进入目录 dir  列出当前目录下的文件[在linux上是ls] e:  进入E盘 tab键可以快速进入目录

  7. Centos7操作系统部署指南

    一.硬件环境: Dell R620 二.软件环境: Centos6.4 X86_64 +KVM Windows7+vnc 三.安装说明 操作系统更新之迅速,让作为新手的系统运维人员有点措手不及,相对于 ...

  8. 【POJ 2286】 The Rotation Game

    [题目链接] http://poj.org/problem?id=2286 [算法] IDA* [代码] #include <algorithm> #include <bitset& ...

  9. docker overlay网络实现

    DOCKER的内置OVERLAY网络 内置跨主机的网络通信一直是Docker备受期待的功能,在1.9版本之前,社区中就已经有许多第三方的工具或方法尝试解决这个问题,例如Macvlan.Pipework ...

  10. 本地文件SVN和 vs svn 插件的使用!!

    比如:客服端是用的TortoiseSVN-1.7.7.22907-x64-svn-1.7.5.msi 里面svn 版本是1.7.5 vs里的插件 也需要svn 版本是1.7.5 对应的AnkhSvn- ...