当前位置: 首页 > news >正文

百度网站下拉怎么做/什么是关键词搜索

百度网站下拉怎么做,什么是关键词搜索,网站建设目标的管理可行性,做无障碍浏览网站Description BZOJ5157Luogu3970 求原序列有多少个上升子序列。 Solution 本来想先暴力DP一下拿个部分分,但是由于不会去重,这个思路就破灭了。 后来手玩的时候突然发现,不就是把比这个数小的答案都加起来就是它的答案了啊,形式化的…

Description

BZOJ5157
Luogu3970
求原序列有多少个上升子序列。

Solution

本来想先暴力DP一下拿个部分分,但是由于不会去重,这个思路就破灭了。
后来手玩的时候突然发现,不就是把比这个数小的答案都加起来就是它的答案了啊,形式化的说就是\(f_i=\sum f_j (j < i,a_j<a_i)\)。
这样的话离散化一下树状数组求前缀和就可以水过了...

Code

#include <cstdio>
#include <algorithm>const int N = 1e5 + 10;
const int MOD = 1e9 + 7;int f[N], a[N], b[N], n, c[N];void add(int p, int x) {while (p <= n) {f[p] = (f[p] + x) % MOD;p += p&-p;}
}int query(int p) {int ans = 0;while (p > 0) {ans = (ans + f[p]) % MOD;p -= p&-p;}return ans;
}int main() {scanf("%d", &n);for (int i = 1; i <= n; ++i) {scanf("%d", &a[i]);c[i] = a[i];}std::sort(c+1, c+n+1);int now = std::unique(c+1, c+n+1) - c;for (int i = 1; i <= n; ++i) {b[i] = std::lower_bound(c+1, c+now, a[i]) - c;}for (int i = 1; i <= n; ++i) {int ans = query(b[i]-1)+1;add(b[i], (query(b[i])-query(b[i]-1)+MOD)%MOD*-1);add(b[i], ans);}int ans = (query(n) - now + 1 + MOD) % MOD;printf("%d\n", ans);return 0;
}

转载于:https://www.cnblogs.com/wyxwyx/p/lg3940.html

相关文章:

  • 威远移动网站建设/seo排名优化软件有用
  • java网站做微信分享/陕西网站建设网络公司
  • 东莞常平医院网站建设/深圳营销策划公司十强
  • 自己如何做网站建设/seo外链购买
  • 郑州网站建设网站开发/网络营销ppt案例
  • 邯郸网站建设浩森宇特/经典软文案例分析
  • 福州网站建设联系时事在/苏州百度快照优化排名
  • 舟山企业网站建设/网址大全下载
  • 六盘水网站建设/搜索引擎入口yandex
  • 网站建设多少钱一年/站长工具无内鬼放心开车禁止收费
  • 温州网站建设大全/网站关键词查询网址
  • 思帽西宁网站建设/排名轻松seo 网站推广