bzoj4282 慎二的随机数列 树状数组求LIS + 构造
首先,我们不难发现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 + 构造的更多相关文章
- [BZOJ5427]最长上升子序列/[BZOJ4282]慎二的随机数列
		
[BZOJ5427]最长上升子序列/[BZOJ4282]慎二的随机数列 题目大意: 给你一个长度为\(n(n\le10^5)\)的整数序列,其中有一些数已经模糊不清了,现在请你任意确定这些整数的值,使 ...
 - HDU1087(树状数组求LIS)
		
题是水题,学习一下用树状数组求LIS. 先离散化一下,注意去重:然后就把a[i]作为下标,dp[i]作为值,max作为维护的运算插进树状数组即可. 如果是上升子序列,询问(a[i] - 1):如果是不 ...
 - [bzoj4282]慎二的随机数列_动态规划_贪心
		
慎二的随机数列 bzoj-4282 题目大意:一个序列,序列上有一些数是给定的,而有一些位置上的数可以任意选择.问最长上升子序列. 注释:$1\le n\le 10^5$. 想法:结论:逢N必选.N是 ...
 - BZOJ4282 : 慎二的随机数列
		
首先在开头加上-inf,结尾加上inf,最后答案减2即可. 设s[i]为i之前未知的个数,f[i]为以i结尾的LIS,且a[i]已知,那么: f[i]=max(f[j]+min(s[i]-s[j],a ...
 - Codeforces 486E LIS of Sequence --树状数组求LIS
		
题意: 一个序列可能有多个最长子序列,现在问每个元素是以下三个种类的哪一类: 1.不属于任何一个最长子序列 2.属于其中某些但不是全部最长子序列 3.属于全部最长子序列 解法: 我们先求出dp1[i] ...
 - poj1631——树状数组求LIS
		
题目:http://poj.org/problem?id=1631 求LIS即可,我使用了树状数组. 代码如下: #include<iostream> #include<cstdio ...
 - 树状数组求LIS
		
我真的是咸鱼啊 多少年前的基础了我竟然才弄明白,哭 用树状数组维护<=x的最上上升子序列的最大值即可啊Orz 我真的菜的一笔啊! #include <bits/stdc++.h> u ...
 - bzoj4282慎二的随机数列
		
海带头又上线了QwQ~ 这是一个奇怪的lis问题 显然一定存在一种最优答案使所有辨认不清的数都在答案中. [为什么呢]因为你完全可以用一个'N'来替换一个'K'啊QwQ~ 那么在选完所有'N'之后,一 ...
 - 树状数组求LIS模板
		
如果数组元素较大,需要离散化. #include <iostream> #include <cstdio> #include <cstring> #include ...
 
随机推荐
- 【ACM】nyoj_139_我排第几个_201308062046
			
我排第几个时间限制:1000 ms | 内存限制:65535 KB 难度:3描述 现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排 ...
 - 【Java】基本类型和引用类型(值传递)
			
[关键词] [问题] · 加深对基本类型和引用类型的理解: [效果图] [分析] 參见最后的[參考资料] [解决方式] [代码] public void test() throws Exception ...
 - @RequestParam,@PathVariable等注解区别
			
一.@RequestParam和@PathVariable的区别 1.@RequestParam是从uri中request后面的参数串来取得参数的 2.@PathVariable是从uri模板中取得参 ...
 - Squares-暴力枚举或者二分
			
B - Squares Time Limit:3500MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
 - 【有奖征资源,分享有内涵】贡献你的CSDN博文和下载资源,不断更新中
			
我们收集了CSDN热心博主的博文 和相关下载资源.这些可爱博主上传了免积分的CSDN资源,并贡献了相关的用法,改进策略,进行了翔实的分析.感谢博主的贡献.并期待有很多其它这种好人! 我们特推出活动&q ...
 - java泛型具体解释
			
为什么引入泛型 bug是编程的一部分,我们仅仅能尽自己最大的能力降低出现bug的几率,可是谁也不能保证自己写出的程序不出现不论什么问题. 错误可分为两种:编译时错误与执行时错误.编译时错误在编译时能够 ...
 - Linux命令(十)——Shell程序设计一(变量与操作符)
			
Shell是linux系统中用户和系统交互的接口,它除了作为命令解释器以外,还是一种高级程序设计语言.在前面介绍的linux命令中,Shell都作为命令解释器出现.下面分两节简单介绍脚本程序设计中的语 ...
 - MySQL主从复制和读写分离
			
我们知道应用对数据库的訪问通常情况下大部分都是读操作,写仅仅占非常少一部分.因此读写分离(read-write-splitting)能有效减少主库压力,从而解决站点发展过程中遇到的第一次数据库瓶颈. ...
 - POJ1151 Atlantis 扫描线算法
			
题目大意 给出几个矩形对角端点坐标,求这些矩形整体覆盖的面积. 扫描线算法 整个平面被每个矩形的水平边所在直线(以后简称“水平线”)分成了几个部分,而整体覆盖面积则为每相邻的两个水平线间夹的长度(以后 ...
 - Android4.0.4-在build.prop中添加属性的方法【转】
			
本文转载自:http://blog.csdn.net/imyfriend/article/details/8939964 1.在*.rc文件中用setprop添加,例如在源码android4.0\sy ...