bzoj4881 线段游戏——上升序列方案数
题目: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 线段游戏——上升序列方案数的更多相关文章
- BZOJ4881 线段游戏(二分图+树状数组/动态规划+线段树)
相当于将线段划分成两个集合使集合内线段不相交,并且可以发现线段相交等价于逆序对.也即要将原序列划分成两个单增序列.由dilworth定理,如果存在长度>=3的单减子序列,无解,可以先判掉. 这个 ...
- ZOJ - 2402 DP方案数
题意:给出m,序列第i位是第i-1位的至少2倍大,的求长度为n且每一位范围均在1-m的序列方案数 对求方案数做不到信手拈来的感觉,需要加强 用简单的预处理和最优子结构能优化到很不错的效率了 #incl ...
- BZOJ4881: [Lydsy1705月赛]线段游戏(二分图)
4881: [Lydsy1705月赛]线段游戏 Time Limit: 3 Sec Memory Limit: 256 MBSubmit: 359 Solved: 205[Submit][Stat ...
- 【BZOJ4881】5月月赛D 线段游戏 树状数组+set
Description quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐 标分别为(0,i)和(1,p_i),其中p_1,p_2,. ...
- 【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][ ...
- BZOJ 4881: [Lydsy1705月赛]线段游戏 动态规划 + 线段树
Description quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐 标分别为(0,i)和(1,p_i),其中p_1,p_2,. ...
- BZOJ 4881: [Lydsy2017年5月月赛]线段游戏
4881: [Lydsy2017年5月月赛]线段游戏 Time Limit: 3 Sec Memory Limit: 256 MBSubmit: 164 Solved: 81[Submit][St ...
- 删数方案数(regex)
[题目描述] 给出一个正整数序列 a,长度为 n,cyb 不喜欢完美,他要删掉一些数(也可以不删,即删掉0个),但是他不会乱删,他希望删去以后,能将 a 分成 2 个集合,使得两个非空集合的数的和相同 ...
随机推荐
- POJ1450:Gridland 【杂题】
题目大意:先给出了TSP的背景,然后给出一个n*m的单位格点的图,图中除边缘上的点与八个方向的点有边连接,距离为欧拉距离,求从左上角出发的TSP 思路:从水题列表中看到的题,但看一开始给出的backg ...
- HDU 4622 (后缀自动机)
HDU 4622 Reincarnation Problem : 给一个串S(n <= 2000), 有Q个询问(q <= 10000),每次询问一个区间内本质不同的串的个数. Solut ...
- SeaJS项目完整实例【转】
index.html——主页面. sea.js——SeaJS脚本. init.js——init模块,入口模块,依赖data.jquery.style三个模块.由主页面载入. data.js——data ...
- iOS tableview上textView在编辑状态时,tableview自动上移的功能
在viewcognroller中,添加tableview时, tableview中cell上的textField如果吊起键盘时,tableview时可以自动上移,但是如果是textView吊起键盘,t ...
- loj6173 Samjia和矩阵(后缀数组/后缀自动机)
题目: https://loj.ac/problem/6173 分析: 考虑枚举宽度w,然后把宽度压位集中,将它们哈希 (这是w=2的时候) 然后可以写一下string=“ac#bc” 然后就是求这个 ...
- GreenDao数据库的升级
应用使用了GreenDao数据库,在版本升级的时候需要更改dao的字段,新增.修改.删除字段操作,如果直接删除原来的表的话那用户原来的一些数据就没有了,所以在更新数据库的时候需要做一次封装,把原来的数 ...
- 【转】Web Worker javascript多线程编程(一)
原文:https://www.cnblogs.com/peakleo/p/6218823.html -------------------------------------------------- ...
- router-link的a样式变成div样式元素属性
<router-link tag="div" :to="itemChild.path"><span>{{itemChild.name}} ...
- 自己定义验证器——用Struts2框架以框架师的思维灵活做好该事情
面对的问题:自己定义一个18位身份验证器.编写验证器.在validators.xml文件里进行注冊.在验证配置文件里使用? 第一部分:理解Struts2中自带的验证器 第二部分:如何通过server( ...
- 使用word模板生成pdf文件
使用word模板生成pdf文件 源码:UserWord