P3971-[TJOI2014]Alice and Bob【贪心】
正题
题目链接:https://www.luogu.com.cn/problem/P3971
题目大意
一个1∼n1\sim n1∼n的一个排列,设aia_iai表示以iii结尾的最长上升子序列长度,bib_ibi表示以iii开头的最长下降子序列长度。
给出序列aaa求序列bbb的最大和。
1≤n≤1051\leq n\leq 10^51≤n≤105
解题思路
考虑数组aaa带来的限制
- 对于一个ai=aj=w(i<j)a_i=a_j=w(i<j)ai=aj=w(i<j)那么有xi>xjx_i>x_jxi>xj
- 对于一个aj=w+1a_j=w+1aj=w+1前一个最近的ai=wa_i=wai=w那么有xi<xjx_i<x_jxi<xj
第一个限制其实不用管,因为如果我们要最优,一定会满足那个限制。
考虑第二个限制,我们将iii向jjj连一条边,这样我们就可以得到一棵树(把000视为虚根的话)。
那么我们子节点的权值一定要比父节点的大,然后在满足这个的前提下我们优先扩展编号大的节点就好了。
也就是从大到小跑一遍dfsdfsdfs序就可以得到xxx数组。
然后用树状数组统计一下答案。
时间复杂度O(nlogn)O(n\log n)O(nlogn)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lowbit(x) (x&-x)
using namespace std;
const int N=1e5+10;
struct node{int to,next;
}a[N];
int n,tot,cnt,dfn[N],ls[N],t[N],las[N];
long long ans;
void addl(int x,int y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;return;
}
void dfs(int x){dfn[x]=++cnt;for(int i=ls[x];i;i=a[i].next)dfs(a[i].to);return;
}
void Change(int x,int val){while(x<=n){t[x]=max(t[x],val);x+=lowbit(x);}return;
}
int Ask(int x){int ans=0;while(x){ans=max(ans,t[x]);x-=lowbit(x);}return ans;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){int x;scanf("%d",&x);addl(las[x-1],i);las[x]=i; }cnt=-1;dfs(0);for(int i=n;i>=1;i--){int t=Ask(dfn[i])+1;ans+=t;Change(dfn[i],t);}printf("%lld\n",ans);return 0;
}
P3971-[TJOI2014]Alice and Bob【贪心】相关推荐
- [TJOI2014] Alice and Bob
非常好的一道思维性题目,想了很久才想出来qwq(我好笨啊) 考虑a[]数组有什么用,首先可以yy出一些性质 (设num[i]为原来第i个位置的数是什么 , 因为题目说至少有一个排列可以满足a[],所以 ...
- [bzoj5158][Tjoi2014]Alice and Bob
好羞愧啊最近一直在刷水... 题意:给定序列$c$的$a_i$,构造出一个序列$c$使得$\sum b_i$最大. 其中$a_i$表示以$c_i$结尾的最长上升子序列长度,$b_i$表示以$c_i$为 ...
- HDU4268 2012ACM长春赛区网络赛 Alice and Bob
题目:HDU4268(贪心) 题意是Alice和Bob都有N张卡片,卡片各有尺寸,Alice拿自己的卡片分别去盖Bob的,给出每张卡片的尺寸,问最多可以盖住多少张. 先说一下我错误的解题方法,主要思想 ...
- Sicily1798. Alice and Bob[策略问题]
[原题描述] Description Bob is very famous because he likes to play games. Today he puts a chessboard in ...
- SDUT2608(Alice and Bob)
题目描述 Alice and Bob like playing games very much.Today, they introduce a new game. There is a polynom ...
- NYOJ 1053 Alice and Bob (N)
Alice and Bob (N) 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 也不知道是谁规定的,Alice 和 Bob总是有一堆做不完的事,和一堆奇葩想法,而且重 ...
- NYOJ练习题 又见Alice and Bob
又见Alice and Bob 时间限制:1000 ms | 内存限制:65535 KB 描述 集训生活如此乏味,于是Alice和Bob发明了一个新游戏.规则如下:首先,他们得到一个集合包含n个特 ...
- 牛客 - Alice and Bob(尺取+二分)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,和一个数字 kkk.现在给出 mmm 次询问,每次查询需要回答区间 [l,r][l,r][l,r] 内有多少个子区间,满足区间内不同的数字 ...
- 2021牛客暑期多校训练营1 A.Alice and Bob 博弈 SG函数
传送门 文章目录 题意: 思路: 题意: 有两堆石子,两个人每次可以进行如下操作:从某一堆狮子中拿出x(x>0)x(x>0)x(x>0)个,从另一堆石子中拿出s∗x(s>=0) ...
- Alice and Bob
Alice and Bob 题意: 两人博弈,每次一个人从一堆中拿k个,同时从另一堆拿k * s(s>=0)个,问谁先不能拿 10000组数据,N<=5000 题解: (x,y)表示第一堆 ...
最新文章
- Swift 字典转数组
- 2007年3月东北微软技术活动预告
- ubuntu15.10安装wireshark
- minisap的安装
- C++学习笔记(八)——内联函数
- Python偏函数应用举例-路灯指示牌
- Java 解析 XML
- Fleury算法 求欧拉回路
- 定档6月11日 诺基亚手机新品发布亮点抢先看
- npm,umi,yarn
- Linux 命令(137)—— strace 命令
- Hadoop MapReduce编程 API入门系列之wordcount版本3(七)
- delphi xe6 让 ListView 在 Android 可回弹[根据龟山阿卍原创修改为xe6版本]
- AWVS 13 Docker版本(破解后)
- java读取修改文件内容_JAVA读取文件指定内容进行修改
- 有哪些公共管理或行政管理学习帮助较大的外文期刊?
- Intel无线网卡AX210驱动bug
- 男人。。。女人。。。经典语录
- 你真的了解宏吗:浅谈宏定义(#define语句)
- bi导入数据失败 power_如何用PowerBI导入网页数据
热门文章
- java继承接口和泛型,JavaSE习题 继承接口和泛型
- vue 一个页面有点请求需要同时发送_前端性能优化,这些你都需要知道
- 小米8对一加6打开软件速度测试,买一加6还是小米8?小米8和一加6区别对比
- mysql打开无法控制_MySQL不能启动和停止 MySQL各种解决方法教程
- 拆分路径 java_JAVA 类文件中的路径如何拆分和替换
- 问题 D: 二叉树求高度
- 计算机检测维修与数据恢复课件,2017年全国职业院校技能大赛中职组“计算机检测维修与数据恢复”赛项说明会ppt课件.ppt...
- C++ class类 实现搜索二叉树(BST)
- 二叉树的遍历(算法导论第三版12.1-4)(包含先序遍历,后序遍历和中序遍历)
- 最短路(遍历边)计蒜客—DD坐地铁