BZOJ4881: [Lydsy1705月赛]线段游戏(二分图)
4881: [Lydsy1705月赛]线段游戏
Time Limit: 3 Sec Memory Limit: 256 MB
Submit: 359 Solved: 205
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2 4 5 3
Sample Output
HINT
Source
题意:即是有多少种方案,把一个序列划分为两个上升子序列。
思路:既然是上升的,我们可以用dp[x][y],保存两个子序列的最后一位,即两个子序列的最大值。 这样DP的话显然不可能操作。
我们先考虑不合法的情况,如果最长下降子序列LDS>2,那么一定无解,因为x和y都只能连接比自己大的,如果连续下降三次,那么x和y都无法接纳第三个。 所以先判无解,如果一个数前面有比它大的,后面有比它小的,说明LDS>=3,无解。
假设我们把逆序关系连边,那么这个图是个二分图,有解的情况下,一个点要么有入度,要么有出度,一个连通块有两种染色方案,答案就是2^连通块数。
我们用set来维护每个连通块的最大值。 每次新加入一个数X,那么set里面大于X的数都与X连接一条边,所以这些在一个连通块里,删去,且留下最大值。
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
const int Mod=;
int a[maxn],pre[maxn],lat[maxn];
set<int>s; set<int>::iterator it;
int qpow(int a,int x){
int res=; while(x){
if(x&) res=1ll*res*a%Mod;
a=1ll*a*a%Mod; x>>=;
} return res;
}
int main()
{
int N; scanf("%d",&N);
rep(i,,N) scanf("%d",&a[i]);
int Mx=;
rep(i,,N){
if(Mx>a[i]) pre[i]=;
Mx=max(Mx,a[i]);
}
int Mn=N+;
for(int i=N;i>=;i--){
if(Mn<a[i]) lat[i]=;
Mn=min(Mn,a[i]);
}
rep(i,,N) if(pre[i]&&lat[i]) return puts(""),;
rep(i,,N){
int mx=a[i];
while(!s.empty()){
it=s.end(); it--;
if(*it>a[i]) mx=max(mx,*it),s.erase(it);
else break;
}
s.insert(mx);
}
int ans=qpow(,s.size());
printf("%d\n",ans);
return ;
}
BZOJ4881: [Lydsy1705月赛]线段游戏(二分图)的更多相关文章
- [BZOJ4881][Lydsy1705月赛]线段游戏
首先冷静一下看清问题的本质,是将整个数列分成两个递增子序列. 那么由Dilworth定理得,无解当且仅当数列的最长下降子序列的长度>2,先特判掉. 然后就有一些比较厉害的做法:http://ww ...
- BZOJ 4881: [Lydsy1705月赛]线段游戏 动态规划 + 线段树
Description quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐 标分别为(0,i)和(1,p_i),其中p_1,p_2,. ...
- bzoj 4881 [Lydsy1705月赛]线段游戏
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4881 1.当一块相互交织的线段中有3个或以上两两相交的那种线段时,无解. 这就是最长下降子序 ...
- BZOJ 4881: [Lydsy2017年5月月赛]线段游戏
4881: [Lydsy2017年5月月赛]线段游戏 Time Limit: 3 Sec Memory Limit: 256 MBSubmit: 164 Solved: 81[Submit][St ...
- [bzoj4881][Lydsy2017年5月月赛]线段游戏
来自FallDream的博客,未经允许,请勿转载,谢谢. quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐标分别为(0,i)和(1, ...
- 【bzoj4881】[Lydsy2017年5月月赛]线段游戏 树状数组+STL-set
题目描述 quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐标分别为(0,i)和(1,p_i),其中p_1,p_2,...,p_n构成 ...
- bzoj 4879 失控的数位板 4881 线段游戏 贪心,瞎搞
[Lydsy1705月赛]失控的数位板 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 148 Solved: 33[Submit][Status][ ...
- BZOJ4886: [Lydsy1705月赛]叠塔游戏(环套树森林&贪心)
4886: [Lydsy1705月赛]叠塔游戏 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 198 Solved: 76[Submit][Stat ...
- BZOJ4883: [Lydsy1705月赛]棋盘上的守卫(最小环套树森林&优化定向问题)
4883: [Lydsy1705月赛]棋盘上的守卫 Time Limit: 3 Sec Memory Limit: 256 MBSubmit: 475 Solved: 259[Submit][St ...
随机推荐
- docker——安全防护与配置
Docker是基于Linux操作系统实现的应用虚拟化.运行在容器内的进程,跟运行在本地系统的进程本质上并无区别,配置不合适的安全策略将可能给本地系统带来安全风险,因此,Docker的安全性在生产环境中 ...
- DB杂记
1. mybatits 批量插入: <insert id="insertColumnitem2"> INSERT INTO REPORT_COLUMNITEM (COL ...
- linux内核源码在线浏览
1.https://elixir.bootlin.com (只能搜索函数和宏定义,功能单一) 2.https://lxr.missinglinkelectronics.com (比第一个功能多一些, ...
- POJ 3268 Silver Cow Party(最短路&Dijkstra)题解
题意:有n个地点,有m条路,问从所有点走到指定点x再走回去的最短路中的最长路径 思路:用Floyd超时的,这里用的Dijkstra. Dijkstra感觉和Prim和Kruskal的思路很像啊.我们把 ...
- Mac下配置Hive环境
在配置Hive环境之前,需要Hadoop环境. 安装Hive 点击下载 下载结束后,会有一个.tar文件,使用以下命令解压该文件. tar -zxvf 要解压的tar包 解压完成后如下 修改Hive配 ...
- idea tomcat启动乱码问题
配置idea的安装文件的编码: JetBrains\IntelliJ IDEA 2016.3\bin中配置文件idea.exe.vmoptions.idea64.exe.vmoptions 添加 -D ...
- [BZOJ4069][Apio2015]巴厘岛的雕塑
题目大意 分成 \(x\) 堆,是的每堆的和的异或值最小 分析 这是一道非常简单的数位 \(DP\) 题 基于贪心思想,我们要尽量让最高位的 \(1\) 最小, 因此我们考虑从高位向低位进行枚举,看是 ...
- Codeforces Beta Round #57 (Div. 2) A,B,C,D,E
A. Ultra-Fast Mathematician time limit per test 2 seconds memory limit per test 256 megabytes input ...
- redis高可用 - redis集群
redis-sentinel方案提供了单点的高可用解决方案,但是当数据量和业务量极速增长时,单点的reids不可能无限的纵向扩容(增大内存),这个时候就需要redis有集群的能力来扛. redis集群 ...
- Android 自定义注解(Annotation)
现在市面上很多框架都有使用到注解,比如butterknife库.EventBus库.Retrofit库等等.也是一直好奇他们都是怎么做到的,注解的工作原理是啥.咱们能不能自己去实现一个简单的注解呢. ...