【Codeforces 597C】 Subsequences - DP 主席树
来源:互联网 发布:java代码阅读器 app 编辑:程序博客网 时间:2024/05/16 18:20
题意:给一个长度为n的排列,求长度为k+1的上升子序列个数。
很显然的DP,
用个主席树随便滚动地维护一下前缀和就好。
关于上升子序列系列的问题似乎都是可以这么乱搞的。
时间复杂度
注意是长度为k+1……是上升子序列……
#include <bits/stdc++.h>using namespace std;#define rep(i,a,b) for(int i = a , _ = b ; i <= _ ; i ++)#define per(i,a,b) for(int i = a , _ = b ; i >= _ ; i --)#define cr(x) memset(x , 0 , sizeof x)#define maxn 100007#define maxs 2000007inline int rd() { char c = getchar(); while (!isdigit(c)) c = getchar() ; int x = c - '0'; while (isdigit(c = getchar())) x = x * 10 + c - '0'; return x;}typedef long long ll;typedef int seg_int[maxs];typedef ll seg_ll [maxs];typedef int arr[maxn];int n , m;struct CMT { arr rt; seg_int lc , rc; seg_ll val ; int tot , p; ll v; void update(int pr , int&nr , int l , int r) { if (!nr) nr = ++ tot ; val[nr] = val[pr] + v; if (l == r) return; int m = l + r >> 1; if (p <= m) rc[nr] = rc[pr] , update(lc[pr] , lc[nr] , l , m); else lc[nr] = lc[pr] , update(rc[pr] , rc[nr] , m + 1 , r); } ll query(int&nr , int l , int r) { if (!nr) return 0; if (r <= p) return val[nr]; int m = l + r >> 1; if (p <= m) return query(lc[nr] , l , m); else return val[lc[nr]] + query(rc[nr] , m + 1 , r); } inline void M(int pr , int nr , int _p , ll _v) { p = _p , v = _v; update(rt[pr] , rt[nr] , 1 , n); } inline ll Q(int nr , int _p) { p = _p; return query(rt[nr] , 1 , n); } inline void C() { tot = 0; cr(rt) , cr(lc) , cr(rc) , cr(val); }}tr[2];arr a;void input() { n = rd() , m = rd() + 1; rep (i , 1 , n) a[i] = rd(); std::reverse(a + 1 , a + n + 1);}void solve() { int cur = 0 , pre = 1; per (i , n , 1) tr[cur].M(i + 1 , i , a[i] , 1); rep (j , 2 , m) { cur ^= 1 , pre ^= 1; tr[cur].C(); per (i , n , 1) tr[cur].M(i + 1 , i , a[i] , tr[pre].Q(i + 1 , a[i])); } using namespace std; cout << tr[cur].Q(1 , n + 1) << endl;}int main() { #ifndef ONLINE_JUDGE freopen("data.txt" , "r" , stdin); #endif input(); solve(); return 0;}
0 0
- 【Codeforces 597C】 Subsequences - DP 主席树
- Codeforces 597C Subsequences dp + 树状数组
- Subsequences CodeForces - 597C 树状数组 + dp
- Codeforces 597C Subsequences 【树状数组优化DP】
- Codeforces 597C Subsequences【Dp+二维树状数组】
- ACM有关子序列的DP题合集【plus: Codeforces 597C Subsequences】
- codeforces-597C-Subsequences【树状数组】
- 597C. Subsequences【DP】【树状数组】
- 【Codeforces 597C】【DP 树状数组优化】Subsequences 【n个不同数,长度为k+1的LIS数】
- Codeforces 803F Coprime Subsequences DP+GCD
- Codeforces Testing Round #12C - Subsequences (dp+树状数组优化)
- codefoces 597C - Subsequences
- Codeforces 458C Elections 贿赂选票抢主席! 线段树
- Codeforces 786C Till I Collapse[主席树][二分]
- codeforces 853c (关于矩形的主席树)
- 【暴力讨论+主席树】Codeforces 853C Boredom
- Codeforces 314C. Sereja and Subsequences
- Codeforces 844C Sorting by Subsequences【思维】
- 期末总结
- SPIR-V 研究:编译器基本原理(三) - Chomsky文法分类
- 循环单向链表
- 浅读原型
- centos rm -rf 恢复删除的文件
- 【Codeforces 597C】 Subsequences - DP 主席树
- 项目第二天
- ceph学习笔记
- Servlet获取参数Map
- redis 命令总结
- 乱码
- C语言项目感受
- C++ 基类指针数组,虚函数
- Longest Palindromic Substring 最长回文字符串