BZOJ 3339: Rmq Problem
2017-01-11 14:06
369 查看
3339: Rmq Problem
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1075 Solved: 549
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
7 50 2 1 0 1 3 2
1 3
2 3
1 4
3 6
2 7
Sample Output
30
3
2
4
HINT
Source
By Xhr[Submit][Status][Discuss]
和 3585 mex 一模一样,代码不变,AC依旧。
#include <bits/stdc++.h> const int mxn = 200005; int n, m, num[mxn], nxt[mxn], lst[mxn], mex[mxn], vis[mxn], ans[mxn]; struct query { int l, r, t; }q[mxn]; inline bool cmp(const query &a, const query &b) { return a.l < b.l; } signed main(void) { scanf("%d%d", &n, &m); for (int i = 1; i <= n; ++i) { scanf("%d", num + i); if (num[i] > n) num[i] = n; } for (int i = 0; i <= n; ++i) lst[i] = n + 1; for (int i = n; i >= 1; --i) nxt[i] = lst[num[i]], lst[num[i]] = i; for (int i = 1; i <= n; ++i) { mex[i] = mex[i - 1]; vis[num[i]] = true; while (vis[mex[i]]) ++mex[i]; } for (int i = 1; i <= m; ++i) scanf("%d%d", &q[i].l, &q[i].r), q[i].t = i; std::sort(q + 1, q + m + 1, cmp); int left = 1; for (int i = 1; i <= m; ++i) { while (left < q[i].l) { int t = nxt[left]; int p = num[left]; for (int j = t - 1; j > left; --j) { if (mex[j] <= p)break; else mex[j] = p; } ++left; } ans[q[i].t] = mex[q[i].r]; } for (int i = 1; i <= m; ++i) printf("%d\n", ans[i]); }
@Author: YouSiki
相关文章推荐
- Bzoj3339 Rmq Problem
- BZOJ 3339 Rmq Problem
- BZOJ 3339: Rmq Problem
- bzoj 3339 Rmq problem 离线+线段树
- BZOJ 3339 Rmq Problem
- 【BZOJ】【3339】Rmq Problem
- BZOJ_3585_mex && BZOJ_3339_Rmq Problem_主席树
- bzoj3339 Rmq Problem
- BZOJ 3339: Rmq Problem
- 【bzoj 3339】: Rmq Problem
- bzoj3339 Rmq Problem
- BZOJ 3339 Rmq Problem【离线,值域线段树
- bzoj 3339: Rmq Problem
- bzoj 3339: Rmq Problem
- bzoj 3339: Rmq Problem
- BZOJ_3585_mex && BZOJ_3339_Rmq Problem_莫队+分块
- 【BZOJ】3339 - Ⅱ - 变式Ⅰ
- BZOJ 3339: Rmq Problem 莫队算法
- Bzoj 3339: Rmq Problem && Bzoj 3585: mex 莫队,树状数组,二分
- 【BZOJ】3339 RMQ Problems - Ⅰ - 题解