Description

降雷皇哈蒙很喜欢雷电,他想找到神奇的电光。
哈蒙有n条导线排成一排,每条导线有一个电阻值,神奇的电光只能从一根导线传到电阻比它大的上面,而且必须从左边向右传导,当然导线不必是连续的。
哈蒙想知道电光最多能通过多少条导线,还想知道这样的方案有多少。

简单来说就是给出一个序列,求该序列最长上升子序列的长度和方案数。

给出type,表示数据类型。type=1表示需要在第二行输出方案数。

有20%的数据type=0

Solution

首先设FiF_i表示以ii为结尾的最长上升子序列的长度,GiG_i表示方案数。

FiF_i可以扔进树状数组,权值线段树里求。

然后是GiG_i,那么很显然有这样一个方程:

Gi=max(1,∑j<i,Fi=Fj+1,aj<aiGj)

G_i=max(1,\sum_{j

于是,我们同样用树状数组(或权值线段树)来优化即可。

Code

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define fo(i,j,k) for(int i=j;i<=k;i++)
#define fd(i,j,k) for(int i=j;i>=k;i--)
#define ll long long
#define N 100001
#define mo 123456789
using namespace std;
int f[N],a[N];
ll g[N];
int mx;
int fz=0;
ll gz=0;
struct node{int f;ll g;
}tr[N*4];
void update(int v)
{tr[v].f=max(tr[v*2].f,tr[v*2+1].f);if(tr[v*2].f>tr[v*2+1].f) tr[v].g=tr[v*2].g;else if(tr[v*2].f<tr[v*2+1].f) tr[v].g=tr[v*2+1].g;else tr[v].g=(tr[v*2].g+tr[v*2+1].g)%mo;
}
void insert(int v,int l,int r,int x,int ff,ll gg)
{if(l==r){if(tr[v].f<ff) tr[v].g=gg;else if(tr[v].f==ff) (tr[v].g+=gg)%=mo;tr[v].f=max(tr[v].f,ff);return;}int mid=(l+r)/2;if(x<=mid) insert(v*2,l,mid,x,ff,gg);else insert(v*2+1,mid+1,r,x,ff,gg);update(v);
}
void find(int v,int l,int r,int x,int y)
{if(l==x && r==y){if(fz<tr[v].f) fz=tr[v].f,gz=tr[v].g;else if(fz==tr[v].f) (gz+=tr[v].g)%=mo;return;}int mid=(l+r)/2;if(y<=mid) find(v*2,l,mid,x,y);else if(x>mid) find(v*2,mid+1,r,x,y);else{find(v*2,l,mid,x,mid);find(v*2+1,mid+1,r,mid+1,y);}
}
int main()
{freopen("hamon.in","r",stdin);freopen("hamon.out","w",stdout);int n,t;scanf("%d %d",&n,&t);fo(i,1,n) scanf("%d",&a[i]),mx=max(mx,a[i]);int p=1;f[1]=1;g[1]=1;insert(1,1,mx,a[1],f[1],g[1]);fo(i,2,n){fz=gz=0;if(a[i]>=2) find(1,1,mx,1,a[i]-1);f[i]=fz+1;g[i]=max(1ll,gz);p=max(p,f[i]);insert(1,1,mx,a[i],f[i],g[i]);}printf("%d\n",p);if(t==1){fz=gz=0;find(1,1,mx,1,mx);printf("%lld",gz);}
}

【JZOJ4920】降雷皇相关推荐

  1. 【JZOJ4920】【NOIP2017提高组模拟12.10】降雷皇

    题目描述 降雷皇哈蒙很喜欢雷电,他想找到神奇的电光. 哈蒙有n条导线排成一排,每条导线有一个电阻值,神奇的电光只能从一根导线传到电阻比它大的上面,而且必须从左边向右传导,当然导线不必是连续的. 哈蒙想 ...

  2. 降雷皇(最长上升子序列数量)解题报告

    测试地址 题意简述 哈蒙有n条导线排成一排,每条导线有一个电阻值,神奇的电光只能从一根导线传到电阻比它大的上面,而且必须从左边向右传导,当然导线不必是连续的. 哈蒙想知道电光最多能通过多少条导线,还想 ...

  3. 皇甫兵兵php,段颎 汉 文旅网 - powered by phpwind.net

    段颎字纪明,武威姑臧人也.其先出郑共叔段,西域都护会宗之从曾孙也.颎少便习弓马,尚游侠,轻财贿,长乃折节好古学.初举孝廉,为宪陵园丞.阳陵令,所在有能政. 迁辽东属国都尉.时鲜卑犯塞,颎即率所领驰赴之 ...

  4. 含有使字的诗句_带有使字的诗-带有使字的诗句

    带有使字的诗-带有使字的诗句 中华优美诗词鉴赏网 时间:2020-06-30 21:19:42 舟过安仁 杨万里 宋 一叶渔船两小童,收篙停棹坐船中.怪生无雨都张伞,不是遮头是使风. 江畔独步寻花七绝 ...

  5. 如何确定自己测试结束?

    GAJVDM靥鲁蕉芬固狙 http://www.huochai.mobi/p/d/6734841/?psp=fzGu BJMGQY亚翘蓝墒餐虏 http://www.huochai.mobi/p/d/ ...

  6. 端午节,中国传统佳节的魅力

    一.导语 端午节是中国传统节日之一,每年农历五月初五.这一天,人们会举行丰富多彩的活动,以纪念古代爱国诗人屈原.在这个特殊的节日里,让我们一起了解端午节的由来.习俗和美食,感受中华民族的文化魅力. 二 ...

  7. 3GQQ幻想西游升级最快的方法(集)

    为什么80%的码农都做不了架构师?>>>    20级开始吃蟠桃.天天吃几个,升级最快. 100级以下做任务 120以上做好装备去三清刷怪 159以上装备加了12去国家刷 做经验值高 ...

  8. 关西旅游地名读法学习

    京都個人旅行ための自己勉強 京都篇 伏見稲荷大社「ふしみいなりだいしゃ」 京都府京都市伏見区深草にある神社.旧称は稲荷神社 全国に約三万社あるといわれる稲荷神社の総本社である. 初詣では近畿地方の社寺 ...

  9. 2016年终盘点:复盘自己参与的5个股权投资项目

    风险提示:创业有风险,投资需谨慎. 郑重声明:本文纯属个人见解,仅供参考. 从2015年5月到2016年3月,1年的时间里,先后参与投资了好狗狗.皇包车.职业梦.比呀比.易途8,一共5个项目. 从现在 ...

最新文章

  1. 堆和栈组合:双端队列c++
  2. Linux中包的管理与程序安装
  3. [ARM-assembly]-ARM向量浮点指令集 快速参考卡
  4. 【Qt】QLayoutItem类
  5. SAP UI5 应用开发教程之五十七 - 基于 OData 注解的 Smart Field 使用方法学习试读版
  6. JDK的bin目录下各种工具的使用说明_对不起自己,这么久没写博,抱歉
  7. SQL SERVER 数据库主键和外键的思考
  8. 微信能远程控制电脑吗_神器分享:用微信就能远程控制电脑,这款神器有些厉害...
  9. 03-25 内存统计
  10. 从病毒到“基础软件污染”,Linux 真的安全吗?
  11. 基于全网最棒的Vue教学视频(尚硅谷张天禹老师)整理出的最详细的Vue指令笔记
  12. Oracle中的常用日期函数
  13. 简单FTP服务器搭建教程
  14. laravel8-使用jwt
  15. 利用wireshark分析Voip语音RTP协议
  16. 【测试】对网易邮箱登录的测试流程
  17. 转载:CVPR 2019 论文汇总(按方向划分,0611 更新中)
  18. 《王煜全创新生态报告12讲》学习笔记
  19. 推荐一款精美小众的读书笔记app
  20. 详解spring用到的九种设计模式

热门文章

  1. UE4 安卓触摸事件相关问题
  2. 用户注册文件register.html的编写
  3. 计算机安装xp蓝屏怎么办,当我在笔记本电脑上安装XP时,出现蓝屏. 我该怎么解决?...
  4. Openlookeng Redis Connector 移植
  5. 1.20 JQuery3:动画和特效
  6. 求解(树的子结构问题-何海涛100题)
  7. VScode神仙插件,程序员必备
  8. iPhone外接闪光灯: 狗仔队必备
  9. VoIP网络电话各种软硬设备部署一览★龙人skype网络电话公司
  10. 内蒙职高计算机专业分数线,内蒙古:本科三批和高职高专批录取分数线公布