Description

quailty和tangjz正在玩一个关于线段的游戏。在平面上有n条线段,编号依次为1到n。其中第i条线段的两端点坐
标分别为(0,i)和(1,p_i),其中p_1,p_2,...,p_n构成了1到n的一个排列。quailty先手,他可以选择一些互不相交
的线段,将它们拿走,当然他也可以一条线段也不选。然后tangjz必须拿走所有剩下的线段,若有两条线段相交,
那么他就输了,否则他就赢了。注意若quailty拿走了全部线段,那么tangjz也会胜利。quailty深深喜欢着tangjz
,所以他不希望tangjz输掉游戏,请计算他有多少种选择线段的方式,使得tangjz可以赢得游戏。

Input

第一行包含一个正整数n(1<=n<=100000),表示线段的个数。
第二行包含n个正整数p_1,p_2,...,p_n(1<=p_i<=n),含义如题面所述。

Output

输出一行一个整数,即tangjz胜利的方案数,因为答案很大,请对998244353取模输出。

Sample Input

5
1 2 4 5 3

Sample Output

8

题解:题意可理解为给定一个序列,求将这个序列分成两个上升序列的方案数

先判断是否输出0,方法是用树状数组求最长下降序列,若长度>2,说明无解

然后从左往右扫,将这些数一个一个加到set里,在加入之前,先将set中比当前数大的数全都删掉,然后将这些数中最大的数加到set中去,最后若set中还剩m个数,答案就是2^m

考试时除了G以外唯一想出来的题~

#include <cstdio>
#include <cstring>
#include <iostream>
#include <set>
using namespace std;
int n,ans,v[100010],tr[100010];
set<int> s;
void updata(int x,int val)
{
for(int i=x;i<=n;i+=i&-i) tr[i]=max(val,tr[i]);
}
int query(int x)
{
int i=x,ret=0;
for(i=x;i;i-=i&-i) ret=max(ret,tr[i]);
return ret;
}
int main()
{
scanf("%d",&n);
int i,a,b;
set<int>::iterator it;
for(i=1;i<=n;i++) scanf("%d",&v[i]);
for(i=n;i>=1;i--)
{
a=query(v[i]-1)+1;
if(a>=3)
{
printf("0");
return 0;
}
updata(v[i],a);
}
for(i=1;i<=n;i++)
{
b=v[i];
while(!s.empty())
{
it=s.upper_bound(b);
if(it==s.end()) break;
b=*it,s.erase(b);
}
s.insert(b);
}
b=s.size(),ans=1;
while(b--) ans=(ans*2)%998244353;
printf("%d",ans);
return 0;
}

最新文章

  1. 微信WeixinJSBridge API(屏蔽右上角按钮等)
  2. 使用 PHP 过滤器(Filter)进行严格表单验证
  3. ORACLE数据库的限制
  4. python 多线程学习
  5. 昂贵的聘礼(dijkstra)
  6. DevOps 高效 shell 命令
  7. Java程序员从笨鸟到菜鸟之(二十一)java过滤器和监听器详解 【转】
  8. Duilib 鼠标在某控件例如按钮上悬停后,对目标控件操作
  9. wifi详解(一)
  10. Lua基础之table详解
  11. HTML解析引擎:Jumony 开源项目
  12. iOS 10 / Swift 3.0 / XCode 8 总结
  13. Android-Error3:Error when loading the SDK
  14. Android学习记录:线程
  15. sql的基本知识
  16. Randomized Online PCA Algorithms with Regret Bounds that are Logarithmic in the Dimension
  17. linux &gt; 和 &gt;&gt; 、&lt; 区别
  18. P2577 [ZJOI2005]午餐
  19. ps教程
  20. C# 使用ftp下载一个文件夹下的所有文件,包括子目录文件夹

热门文章

  1. INFORMIX的dbexport和dbimport使用示例说明
  2. Redis集群搭建问题汇总
  3. 使用802.1X+FreeRadius+LDAP实现网络准入方案
  4. 成为 Team Leader 后我最关心的那些事
  5. Django QuerySet 方法梳理 。model外键 多对多的保存
  6. ldap temp
  7. spark读取本地文件
  8. Groovy学习()Groovy是啥?
  9. Hadoop环境搭载
  10. ansible ansible_os_family == &quot;RedHat&quot; and ansible_lsb.major_release|int &gt;= 6 转为数字比大小