Codeforces Round #326 (Div. 2) D. Duff in Beach(LIS)
来源:互联网 发布:淘宝网书店 编辑:程序博客网 时间:2024/06/05 11:01
题意:
给定一个长度为N的序列a,给定一个长度为L≤1018的序列b,且bi=ai%N
求长度不超过K的b的不降子序列的个数,这个LIS的每个元素不能在同一个N周期内
分析:
由于每个周期最多只能选择一个,将a序列排序
考虑dp[i][j]:=长度为i,且以有序序列a第j个结尾的LIS的个数
转移的时候我们可以维护一个指针,这样转移就是均摊O(1)的了
统计答案时,由于是连续周期的,假如可选周期是T,当前长度为i,那么应该乘上(T−i+1)
代码:
//// Created by TaoSama on 2016-01-26// Copyright (c) 2015 TaoSama. All rights reserved.//#pragma comment(linker, "/STACK:1024000000,1024000000")#include <algorithm>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <string>#include <set>#include <vector>using namespace std;#define pr(x) cout << #x << " = " << x << " "#define prln(x) cout << #x << " = " << x << endlconst int N = 1e6 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;typedef long long LL;int n, K; LL l;pair<int, int> a[N];int main() {#ifdef LOCAL freopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin);// freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout);#endif ios_base::sync_with_stdio(0); while(scanf("%d%I64d%d", &n, &l, &K) == 3) { for(int i = 0; i < n; ++i) { scanf("%d", &a[i].first); a[i].second = i; } sort(a, a + n); vector<vector<int> > f(K, vector<int>(n)); for(int i = 0; i < n; ++i) f[0][i] = 1; for(int i = 1; i < K; ++i) { int sum = 0; for(int j = 0, k = 0; j < n; ++j) { while(k < n && a[k].first <= a[j].first) sum = (sum + f[i - 1][k++]) % MOD; f[i][j] = sum; } } LL ans = 0; for(int i = 0; i < K; ++i) { for(int j = 0; j < n; ++j) { LL cnt = l / n + (a[j].second < l % n); if(cnt - i > 0) { ans += (cnt - i) % MOD * f[i][j] % MOD; ans %= MOD; } } } printf("%I64d\n", ans); } return 0;}
0 0
- Codeforces Round #326 (Div. 2) D. Duff in Beach(LIS)
- Codeforces Round #326 (Div. 2) D. Duff in Beach
- Codeforces Round #326 (Div. 1) B Duff in Beach
- Codeforces Round #326 (Div. 1)-B. Duff in Beach
- codeforces #326 D. Duff in Beach (dp)
- 【Codeforces Round 326 (Div 2)D】【DP】Duff in Beach 数列重复取数最多k次使得单调不下降
- codeforces#326-D - Duff in Beach- dp+分块
- Codeforces Round #326 (Div. 2)B. Duff in Love
- Codeforces Round #326 (Div. 2) 588 B. Duff in Love
- Codeforces Round #326 (Div. 2) B. Duff in Love
- Codeforces Round #326 (Div. 2)B. Duff in Love
- Codeforces Round #326 (Div. 2) E. Duff in the Army
- Codeforces 588D Duff in Beach 【离散化 + dp】
- Codeforces Round #326 (Div. 2) E. Duff in the Army(LCA+倍增法)
- Codeforces Round #323 (Div. 2)D lis
- Codeforces Round #326 (Div. 1) C. Duff in the Army
- Codeforces 587B Duff in Beach
- codeforces 587 B. Duff in Beach
- 网络攻击
- C#Xml,json解析以及Socket传输问题
- 从Android运行时出发,打造我们的脱壳神器
- AFNetworking 支持cookies的解决方案
- android View事件传递
- Codeforces Round #326 (Div. 2) D. Duff in Beach(LIS)
- UE4 main classes explanation
- MR-2.MapReduce序列化&反序列化&MapReduce函数
- Postgresql通过批处理命令执行sql文件
- VMware中的Linux通过NAT方式和本机联网设置
- poj-2352 && HDU-1541 --Stars(树状数组)
- CentOS6.5 python+ipython安装
- Qt之进程间通信(IPC)
- Mybatis、Maven、Spring、struts2结合使用详解