题目: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. CSU1350 To Add which?

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1350 这题目因为每一个数都跟相邻的数有关,所以可以从左到右和从右到左一次扫一遍即可 代 ...

  2. MTK andorid从底层到上层添加驱动

    1 [编写linux驱动程序] 1.1 一.编写驱动核心程序 1.2 二.配置Kconfig 1.3 三.配置Makefile 1.4 四.配置系统的autoconfig 1.5 五.编译 2 [编写 ...

  3. EF关联

    public CustomerMap() { this.ToTable("Customer"); this.HasKey(c => c.Id); this.Property( ...

  4. Java中网络编程

    以下内容引用自http://wiki.jikexueyuan.com/project/java/networking.html: 术语网络编程指编写跨多种设备(电脑)执行的,设备使用一个网络互相连接的 ...

  5. maven生命周期和依赖的范围

    转载:http://blog.csdn.net/J080624/article/details/54692444 什么是依赖? 当 A.jar 包用到了 B.jar 包时,A就对B产生了依赖: 在项目 ...

  6. 小心入怀Yaf

    http://www.laruence.com/2015/05/14/3021.html, 鸟哥文章 看了这个文章,更加要小心的对待 Yaf Yar 框架了. 不正确 glib 有一定的了解进来就是深 ...

  7. libpython2.7.so.1.0: cannot open shared object file: No such file or directory

    解决方法如下: 1.编辑      vi /etc/ld.so.conf  如果是非root权限帐号登录,使用 sudo vi /etc/ld.so.conf  添加上python2.7的lib库地址 ...

  8. uva 10069 Distinct Subsequences 【dp+大数】

    题目:uva 10069 Distinct Subsequences 题意:给出一个子串 x 和母串 s .求子串在母串中的不同序列的个数? 分析:定义dp[i][j]:x 的前 i 个字母在 s 的 ...

  9. 安装和配置Apache-tomcat

    https://tomcat.apache.org/download-90.cgi 我随便下载了一个,而且解压了 我把路径:G:\php\apache-tomcat-9.0.6\bin 放入path, ...

  10. Android使用am命令实现拨打电话、打开应用

    前提: 在Android 通话自己主动化測试中会用到am命令去拨打电话.打开音乐播放器播放音乐等等操作. 这里总结一下am命令. Android am命令: (1)命令參数: am start -n ...