题目:

题目在这里~~~

分析:

按照题意,只需要找到最长上升子序列的数量和每个数对最长上升子序列的贡献次数即可,可以二分找到经过每个数的最长上升子序列的长度,但这样不好统计数量;考虑dp,定义dp[i]为以第i个数结尾的最长上升子序列的长度,DP[i]为其数量,容易想到转移方程:dp[i] = max{dp[j],0<j<i && a[j] < a[i]} + 1,DP[i] = sum{DP[j],0<j<i && dp[j] = dp[i]-1},线段树维护区间最大值及其数量即可快速转移,每次都是在前缀上查询,也可以用树状数组维护;再从后到前来一遍,就可以求出经过每个点的最长上升子序列的长度和数量

代码:

#include <bits/stdc++.h>using namespace std;
typedef long long LL;
const int mod = 998244353;
const int maxn = 5e5+55;
struct node{LL len,num;
}tr[maxn];
int n,m,a[maxn],c[maxn];
node pre[maxn],cur[maxn];
inline int lowbit(int x){return x&(-x);
}
void add(int x,node e){while(x <= m){if(tr[x].len == e.len) tr[x].num = (tr[x].num+e.num)%mod;else if(tr[x].len < e.len){tr[x].len = e.len;tr[x].num = e.num;}x += lowbit(x); }
}
node query(int x){node res = {0,0};while(x > 0){if(res.len == tr[x].len) res.num = (res.num+tr[x].num)%mod;else if(res.len < tr[x].len){res.len = tr[x].len;res.num = tr[x].num;}x -= lowbit(x);}return res;
}
LL qpow(LL a,LL x){LL res = 1;while(x){if(x&1) res = res * a % mod;a = a * a % mod;x >>= 1;}return res;
}
int main(){cin >> n;for(int i = 0;i < n; ++i) cin >> a[i],c[i] = a[i];sort(c,c+n); m = unique(c,c+n) - c;for(int i = 0;i < n; ++i) a[i] = lower_bound(c,c+m,a[i])-c+1;for(int i = 0;i < n; ++i){pre[i] = query(a[i]-1);if(++pre[i].len == 1) pre[i].num = 1;add(a[i],pre[i]);}for(int i = 0; i < n; ++i) a[i] = m-a[i]+1;  //反转序号,方便树状数组更新和查询memset(tr,0,sizeof(tr));node ans = {0,0};                 //整个数组的最长上升子序列的长度及数量for(int i = n-1; ~i; --i){cur[i] = query(a[i]-1);if(++cur[i].len == 1) cur[i].num = 1;add(a[i],cur[i]);if(ans.len == cur[i].len) ans.num = (ans.num + cur[i].num)%mod;else if(ans.len < cur[i].len) ans = cur[i];}LL inv = qpow(ans.num,mod-2);for(int i = 0;i < n; ++i){if(pre[i].len+cur[i].len==ans.len+1) {printf("%lld ",pre[i].num*cur[i].num%mod*inv%mod);}else printf("0 ");}return 0;
}

2019计蒜之道复赛A:外教Michale变身大熊猫【树状数组+dp】相关推荐

  1. 2019 计蒜之道 复赛 A. 外教 Michale 变身大熊猫

    题目链接 题意:本题就是很显然的题意,让你求出共有多少个最长上升子序列,每个数在多少个最长上升子序列中. 这题的难点在于如何求出每个数在多少最长上升子序列中,显然可以用dp,直接dp时间复杂度不允许, ...

  2. 2019计蒜之道复赛-A-外教 Michale 变身大熊猫(线段树求LIS及其元素出现概率)

    时限:1000ms            空间限制:524288K 题目链接https://nanti.jisuanke.com/t/39611 外教变身萌翻小学员,VIPKID "AR 变 ...

  3. [计蒜之道2019 复赛 A]外教 Michale 变身大熊猫 (线段树求LIS+思维)

    外教变身萌翻小学员,VIPKID "AR 变脸" 打造趣味互动课堂,这是在线少儿英语品牌 VIPKID 全新推出的辅助教学功能--AR 变脸,外教在上课过程中可以随意选取合适的表情 ...

  4. 计蒜之道2019 复赛 A.外教 Michale 变身大熊猫 线段树辅助建分层图dp

    题意:给出一个序列,随机取出其中一条最长上升子序列,问你取到每个数的概率是多少. 说起概率,我们可以尝试去求最长上升子序列的个数,显然每个点被取到的概率是 含有这个点的最长上升子序列个数/总共最长上升 ...

  5. 2019 计蒜之道 复赛 “星云系统” 贪心

    题目链接:https://nanti.jisuanke.com/t/39614 题解:首先把每个字符的位置保存下来,然后很容易就想到二分去做,但是T了,所以我们就可以O(n)去做,记录下位置后,直接枚 ...

  6. 2019 计蒜之道 复赛 撑起信息安全“保护伞” 贪心

    题目链接:https://nanti.jisuanke.com/t/39615 题解:两种都从后往前,l记录左括号的数量,r记录右括号数量,找前驱时,要满足第一个符合的s[i]==')' && ...

  7. 2019 计蒜之道 复赛 D——“星云系统”(单调栈||队列+贪心)

    19.97% 1000ms 131072K VIPKID 是在线少儿英语教育平台,网络稳定是在线教育课程质量的红线,VIPKID 为此推出了全球最稳定的教育网络系统 -- "星云系统&quo ...

  8. 计蒜客(青出于蓝胜于蓝) dfs序+树状数组

    武当派一共有 n 人,门派内 n 人按照武功高低进行排名,武功最高的人排名第 1,次高的人排名第 2,... 武功最低的人排名 第 n.现在我们用武功的排名来给每个人标号,除了祖师爷,每个人都有一个师 ...

  9. 2016计蒜之道复赛 微信钱包付款

    2016计蒜之道复赛  微信钱包付款 一.题意: 微信钱包付款 给定n(0≤n≤10​10000),求a,,b,c使得a+b+c=n,并且f(a)=f(b)=f(c),f(n)定义为n的各数位的和,例 ...

最新文章

  1. php设置backlog,高并发调优backlog多大合适?
  2. jstree如何禁止平级拖拽?_小程序为鲜花店经营带来哪些价值?如何搭建一款鲜花小程序?...
  3. vc 中对对话框的几种操作
  4. 为什么“鸿蒙”不是第二个“安卓”,如何看待Harmony OS里的Android痕迹?
  5. vue+node前后端分离接口调用(初学者)
  6. python多进程程序之间交换数据的两种办法--Queue和Pipe
  7. taro 微信公众号_Taro 如何开始微信小程序的开发
  8. 早悟兰因(兰因絮果)
  9. 内网穿透端口映射工具
  10. BME280测湿度温度
  11. [轉載]房地产崩盘绝非戏言
  12. 一,EAIDK-310开箱
  13. 各种网页播放面板代码,MediaPlayer Replayer等
  14. 投稿经验分享之四:SCI投稿之JEI录用
  15. Java 3种批量插入更新操作的效率横向比较
  16. 程序员女装大佬们,你们太可怕了,我还以为在逛 PornHub 呢
  17. 软考——成本估算和成本预算的区别和联系(论文考点)
  18. 事理图谱:事件演化的规律和模式
  19. Android实战简易教程-第七十五枪(WIFI直连工具类)
  20. 如何用英语说明你的离职原因?

热门文章

  1. 入门Webpack,看这篇就够了
  2. 利用MATLAB编程实现系统传递函数的构建以及它们之间进行串联、并联、反馈时的构建方法
  3. 1688API接口:获得店铺的所有商品
  4. dp2:线性dp、区间dp、计数dp.
  5. QTableWidget用法,qt表格使用
  6. 开发语言特性对比 java python golang c# c++
  7. 除夕夜,《大数据周刊》提前给您拜年啦!
  8. KMP--君住长江头,我住长江尾,日日思君不见君,共饮长江水
  9. 【钉钉小程序】报错提示“无跨域调用权限”
  10. 【智能物流】看老板电器如何打造智能仓储物流中心