题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4881

连题意都转化不了了...

题意是要求从一个数列中选出两个上升序列的方案数;

先判断是否有解,如果最长下降子序列长度>2(有两条以上的线相互交织)则无解,先用树状数组判断一下;

分成一个个“连通块”来考虑,相互交织的几条线为一个连通块,连通块之间互不影响;

在 set 中留一个最大的元素作为此连通块的代表,也判断下一个元素是否在同一个连通块;

每个连通块有两种选法,所以最后答案就是 2^( set 剩余元素个数)。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<set>
using namespace std;
int const maxn=1e5+,mod=;
int n,p[maxn],f[maxn],ans;
set<int>s;
int rd()
{
int ret=;char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return ret;
}
void add(int x,int val)
{
for(;x<=n;x+=(x&-x))f[x]=max(f[x],val);
}
int query(int x)
{
int ret=;
for(;x;x-=(x&-x))ret=max(ret,f[x]);
return ret;
}
int main()
{
n=rd();
for(int i=;i<=n;i++)p[i]=rd();
for(int i=n;i;i--)
{
int x=query(p[i])+;
if(x>)
{
printf("");return ;
}
add(p[i],x);
}
set<int>::iterator it;
for(int i=;i<=n;i++)
{
int x=p[i];
while(!s.empty())
{
it=s.upper_bound(x);
if(it==s.end())break;
x=*it; s.erase(x);
}
s.insert(x);
}
int m=s.size(); ans=;
while(m--)(ans*=)%=mod;
printf("%d",ans);
return ;
}

bzoj4881 线段游戏——上升序列方案数的更多相关文章

  1. BZOJ4881 线段游戏(二分图+树状数组/动态规划+线段树)

    相当于将线段划分成两个集合使集合内线段不相交,并且可以发现线段相交等价于逆序对.也即要将原序列划分成两个单增序列.由dilworth定理,如果存在长度>=3的单减子序列,无解,可以先判掉. 这个 ...

  2. ZOJ - 2402 DP方案数

    题意:给出m,序列第i位是第i-1位的至少2倍大,的求长度为n且每一位范围均在1-m的序列方案数 对求方案数做不到信手拈来的感觉,需要加强 用简单的预处理和最优子结构能优化到很不错的效率了 #incl ...

  3. BZOJ4881: [Lydsy1705月赛]线段游戏(二分图)

    4881: [Lydsy1705月赛]线段游戏 Time Limit: 3 Sec  Memory Limit: 256 MBSubmit: 359  Solved: 205[Submit][Stat ...

  4. 【BZOJ4881】5月月赛D 线段游戏 树状数组+set

    Description quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐 标分别为(0,i)和(1,p_i),其中p_1,p_2,. ...

  5. 【bzoj4881】[Lydsy2017年5月月赛]线段游戏 树状数组+STL-set

    题目描述 quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐标分别为(0,i)和(1,p_i),其中p_1,p_2,...,p_n构成 ...

  6. bzoj 4879 失控的数位板 4881 线段游戏 贪心,瞎搞

    [Lydsy1705月赛]失控的数位板 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 148  Solved: 33[Submit][Status][ ...

  7. BZOJ 4881: [Lydsy1705月赛]线段游戏 动态规划 + 线段树

    Description quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐 标分别为(0,i)和(1,p_i),其中p_1,p_2,. ...

  8. BZOJ 4881: [Lydsy2017年5月月赛]线段游戏

    4881: [Lydsy2017年5月月赛]线段游戏 Time Limit: 3 Sec  Memory Limit: 256 MBSubmit: 164  Solved: 81[Submit][St ...

  9. 删数方案数(regex)

    [题目描述] 给出一个正整数序列 a,长度为 n,cyb 不喜欢完美,他要删掉一些数(也可以不删,即删掉0个),但是他不会乱删,他希望删去以后,能将 a 分成 2 个集合,使得两个非空集合的数的和相同 ...

随机推荐

  1. [NOIP2000] 提高组 洛谷P1022 计算器的改良

    题目背景 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了一个刚进入的新手ZL先生. ...

  2. hdu4405:Aeroplane chess

    题目大意:有编号为0-n的格子,从0开始,扔骰子扔到几就走几格.有m个瞬移点,每个点可以从格x直接飞到格y,若瞬移到另一个瞬移点可以继续瞬移.求到达格n的期望扔骰子次数. 题解:期望DP入门好题.网上 ...

  3. django学习之- Models笔记

    1:创建数据库表 #单表# app01_user 生成的表明为 tb1class User(models.Model): name = models.CharField(max_length=32,d ...

  4. uva 662

    dp +路径输出 #include <cstdio> #include <cstdlib> #include <cmath> #include <stack& ...

  5. css三大特性

    层叠性: 当多个样式(样式的优先级相同)作用于同一个(同一类)标签时,样式发生了冲突,总是执行后边的代码(后边代码层叠前边的代码).和标签调用选择器的顺序没有关系. 继承性: 文字的大多属性都可以继承 ...

  6. 《gis空间分析及应用案例解析》培训总结

    <gis空间分析及应用案例解析>培训总结 来源:常德水情 作者:唐校准 发布日期:2014-01-02       2013年12月2630日由中国科学院计算技术研究所教育中心组织的< ...

  7. ssh 执行多条命令包含awk的用法

    格式:ssh user@ip command 单条命令:ssh user@ip command1 多条命令:ssh user@ip "command1;command2" 不加双引 ...

  8. jenkins的代理设置,方便下载插件

    jenkins在下载插件的时候,总是网络不通,需要设置代理跨越长城 java.net.SocketTimeoutException: connect timed out Caused: java.ne ...

  9. pip命令自动补全功能;设置代理;使用国内源

    这是pip自带的功能 执行的脚本 把脚本写入.zshrc或者profile等里面,执行source立即生效 设置代理: pip --proxy=http://username:password@pro ...

  10. openwrt下载编译

    1. 安装依赖包: yum install autoconf binutils bison bzip2 flex gawk gcc gcc-c++ gettext make ncurses-devel ...