[bzoj4282]慎二的随机数列_动态规划_贪心
慎二的随机数列 bzoj-4282
题目大意:一个序列,序列上有一些数是给定的,而有一些位置上的数可以任意选择。问最长上升子序列。
注释:$1\le n\le 10^5$。
想法:结论:逢N必选。N是可以任意选择的位置。
具体的,我们将所有N踢出序列,将给定的权值-=前面N的个数。再在当前序列上求最长上升子序列。
正确性的话如果当前序列中的数:
如果前面的数小于后面的数,显然中间的N我也可以加上。
如果前面的数大于后面的数:
如果前面的数在原序列中的权值大于后面的数在原序列中的权值,那么这两个数无论如何都不能同时选择。
而如果前面的数在原序列中的数小于后面的数在原序列中的权值,那么我们选择抛弃后面的数转而选择中间的所有N,显然更优。
最后,附上丑陋的代码... ...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 100010
using namespace std;
int dp[N],sum,a[N],cnt;
int q[N];
int maxn=0;
int main()
{
int n; cin >> n ;
char opt[10];
for(int i=1;i<=n;i++)
{
scanf("%s",opt+1);
if(opt[1]=='K')
{
int x; scanf("%d",&x);
x-=sum;
a[++cnt]=x;
}
else sum++;
}
int ans=0;
for(int i=1;i<=cnt;i++)
{
int l=0,r=ans;
while(l!=r)
{
int mid=(l+r+1)>>1;
if(a[q[mid]]<a[i]) l=mid;
else r=mid-1;
}
l++;
ans=max(ans,l);
q[l]=i;
}
printf("%d\n",ans+sum);
}
小结:这题...不禁让我想到了Claris的CDQ分治+扫描线+树状数组...
证明对于计算机竞赛的用处,就是可以简化一个复杂的算法(个人理解)。
[bzoj4282]慎二的随机数列_动态规划_贪心的更多相关文章
- [BZOJ5427]最长上升子序列/[BZOJ4282]慎二的随机数列
[BZOJ5427]最长上升子序列/[BZOJ4282]慎二的随机数列 题目大意: 给你一个长度为\(n(n\le10^5)\)的整数序列,其中有一些数已经模糊不清了,现在请你任意确定这些整数的值,使 ...
- bzoj4282慎二的随机数列
海带头又上线了QwQ~ 这是一个奇怪的lis问题 显然一定存在一种最优答案使所有辨认不清的数都在答案中. [为什么呢]因为你完全可以用一个'N'来替换一个'K'啊QwQ~ 那么在选完所有'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 ...
- bzoj4282 慎二的随机数列 树状数组求LIS + 构造
首先,我们不难发现N个位置都选一定不会比少选任意几个差,所以我们就先设定我们将这N个修改机会都用上, 那么如果点 i">ii 前有sumv">sumvsumv个可修改点 ...
- 【BZOJ4282】慎二的随机数列 乱搞
[BZOJ4282]慎二的随机数列 Description 间桐慎二是间桐家著名的废柴,有一天,他在学校随机了一组随机数列, 准备使用他那强大的人工智能求出其最长上升子序列,但是天有不测风云,人有旦夕 ...
- 【bzoj4282】慎二的随机数列
扯几句题外的,最近在看Fate/StayNight,对此人毫无好感…… 每次减一下当前可辨认数,然后随意dp一个LIS,最后记得加回去就好. #include<bits/stdc++.h> ...
- BZOJ 4282(慎二的随机数列
题解: 网上题解还没看 我的方法是用平衡树维护一个单调栈 由于N用了一定是赚的 所以它的作用是让f[i+1]=f[i]+1 这个是可以记录的 就跟noip蚯蚓那题一样 然后插入一个值的时候查询前面的最 ...
- [bzoj1855][Scoi2010]股票交易_动态规划_单调队列
股票交易 bzoj-1855 Scoi-2010 题目大意:说不明白题意系列++...题目链接 注释:略. 想法:这个题还是挺难的. 动态规划没跑了 状态:dp[i][j]表示第i天手里有j个股票的最 ...
- [bzoj3622]已经没有什么好害怕的了_动态规划_容斥原理
bzoj-3622 已经没有什么好害怕的了 题目大意: 数据范围:$1\le n \le 2000$ , $0\le k\le n$. 想法: 首先,不难求出药片比糖果小的组数. 紧接着,我开始的想法 ...
随机推荐
- 数值分析常见算法C++实现
1.1-有效数字丢失现象观察 #include<bits./stdc++.h> using namespace std; double f1(double x) { )-sqrt(x)); ...
- HashMap , TreeMap , TreeMap 默认排序
Java代码 import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java. ...
- C# GridView使用方法
public void Point_databind(PointList pl) { chart1.Series.Clear(); //清空图表 Series s1 = new Series(); / ...
- JSP学习笔记 - 内置对象 Request
1.主要掌握以下5个内置对象及其所属类,必须学会在java docs里根据类名查找相应的方法 request javax.servlet.http.HttpServletRequest res ...
- 【技术累积】【点】【java】【29】MapUtils
内容 是Apache组织下的commons-collections包中的工具类 <dependency> <groupId>commons-collections</gr ...
- 阿里云ECS远程桌面连接失败
管理=>本实例安全组=>配置规则=>配置3389端口
- SSL协议提供的服务
SSL协议提供的服务主要有: 1)认证用户和服务器,确保数据发送到正确的客户机和服务器: 2)加密数据以防止数据中途被窃取: 3)维护数据的完整性,确保数据在传输过程中不被改变.
- Python 之糗事百科多线程爬虫案例
import requests from lxml import etree import json import threading import queue # 采集html类 class Get ...
- git 如何创建一个分支
参考: https://jingyan.baidu.com/article/adc81513b95a20f723bf73bf.html 首先进入本地git仓库目录下,打开git bash环境 使用gi ...
- matlab数值数据的表示方法,输出数据以及相关函数
数据类型的分类: 1.整型 无符号整型和带符号整形 带符号整形的最大值是127 >>x=int8(129) 输出结果是x=127 >>x=unit8(129) 输出结果是x=1 ...