[DP] codeforces 650D. Zip-line
来源:互联网 发布:批发网络摄像头 编辑:程序博客网 时间:2024/06/08 00:21
题意:
给一个长度为n的序列
题解:
把a_{pos}
首先考虑使用了,那么需要一些信息,
容易发现
当处理某个询问时,使用了
另外一种情况就是没有使用到
判断
方法也是求出原序列的
如果存在则说明
这样两种情况就考虑完了。
#include<bits/stdc++.h>using namespace std;const int N = 4e5+5;const int inf = ~0u>>2;int a[N];struct Q{ int val, id; Q(){} Q(int b, int c){ val = b, id = c; }};vector<Q>qry[N];int lsa[N], lsb[N];int ansla[N], anslb[N];int ans[N];int p[N], pcnt;int n, m;int cs[N];bool ok[N];int main(){ scanf("%d%d", &n, &m); for(int i = 1; i <= n; ++i) scanf("%d", a+i); for(int i = 1; i <= m; ++i){ int pos, val; scanf("%d%d", &pos, &val); qry[pos].push_back(Q(val, i)); } p[0] = -inf, pcnt = 1; for(int i = 1; i <= n; ++i){ for(int k = qry[i].size()-1; k >= 0; --k){ int pos = lower_bound(p, p+pcnt, qry[i][k].val)-p; ansla[qry[i][k].id] = pos; } int pos = lower_bound(p, p+pcnt, a[i])-p; lsa[i] = pos; p[pos] = a[i]; if(pos == pcnt) ++pcnt; } int lis = pcnt-1; p[0] = -inf, pcnt = 1; for(int i = n; i >= 1; --i){ for(int k = qry[i].size()-1; k >= 0; --k){ int pos = lower_bound(p, p+pcnt, -qry[i][k].val)-p; anslb[qry[i][k].id] = pos; } int pos = lower_bound(p, p+pcnt, -a[i])-p; lsb[i] = pos; p[pos] = -a[i]; if(pos == pcnt) ++pcnt; } memset(cs, -1, sizeof(cs)); for(int i = 1; i <= n; ++i){ if(lsa[i] + lsb[i] == lis+1){ if(cs[lsa[i]] == -1) cs[lsa[i]] = i; else cs[lsa[i]] = -2; } } for(int i = 1; i <= lis; ++i) if(cs[i] > 0) ok[cs[i]] = 1; for(int i = 1; i <= n; ++i){ for(int k = 0; k < qry[i].size(); ++k){ ans[qry[i][k].id] = max(ok[i]?lis-1:lis, ansla[qry[i][k].id]+anslb[qry[i][k].id]-1); } } for(int i = 1; i <= m; ++i) printf("%d\n", ans[i]);}
0 0
- [DP] codeforces 650D. Zip-line
- codeforces 650 D. Zip-line
- codeforces 650d Zip-line
- Codeforces #345 div1 D. Zip-line LIS dp
- Codeforces Zip-line 650D 345Div1D(LIS)
- CodeForces 650D Zip-line(最长上升子序列)
- Codeforces Round #345 (Div. 1) D. Zip-line
- Codeforces Round #345 (Div. 1) D. Zip-line
- Codeforces 650D. Zip-line (动态LIS) (可持久化线段树 或 离线+树状数组)
- Codeforces 320D Psychos in a Line【单调栈+Dp】
- codeforces #345 (Div. 1) D. Zip-line (线段树+最长上升子序列)
- Codeforces Round #345 (Div. 1) D. Zip-line LIS 离线 离散化 线段树
- 【DP】CodeForces 148D
- Codeforces 221D(dp)
- Codeforces 572D,DP
- codeforces 9D DP
- codeforces 519D dp
- Codeforces 358D【DP】
- 商品搜索引擎资料整理
- oracle常用数据字典
- 文章标题
- Nginx负载均衡配置
- 文章标题
- [DP] codeforces 650D. Zip-line
- Oracle char、varchar、varchar2、nvarchar、nvarchar2、nchar比较
- Android之初探RecyclerView
- 个人信息
- 作业
- Android中基于HTTP协议的网络访问的两种方式
- jquery实现导航菜单
- 设计模式之建造者模式(Builder)
- 冒泡排序100个数的