codeforces 279C Ladder(数据技巧)
来源:互联网 发布:mac 安装python 编辑:程序博客网 时间:2024/06/10 14:14
You've got an array, consisting of n integers a1, a2, ..., an. Also, you've got mqueries, the i-th query is described by two integers li, ri. Numbers li, ri define a subsegment of the original array, that is, the sequence of numbers ali, ali + 1, ali + 2, ..., ari. For each query you should check whether the corresponding segment is a ladder.
A ladder is a sequence of integers b1, b2, ..., bk, such that it first doesn't decrease, then doesn't increase. In other words, there is such integer x (1 ≤ x ≤ k), that the following inequation fulfills: b1 ≤ b2 ≤ ... ≤ bx ≥ bx + 1 ≥ bx + 2... ≥ bk. Note that the non-decreasing and the non-increasing sequences are also considered ladders.
The first line contains two integers n and m (1 ≤ n, m ≤ 105) — the number of array elements and the number of queries. The second line contains the sequence of integers a1, a2, ..., an (1 ≤ ai ≤ 109), where number ai stands for the i-th array element.
The following m lines contain the description of the queries. The i-th line contains the description of the i-th query, consisting of two integers li, ri (1 ≤ li ≤ ri ≤ n) — the boundaries of the subsegment of the initial array.
The numbers in the lines are separated by single spaces.
Print m lines, in the i-th line print word "Yes" (without the quotes), if the subsegment that corresponds to the i-th query is the ladder, or word "No" (without the quotes) otherwise.
8 61 2 1 3 3 5 2 11 32 32 48 81 45 8
YesYesNoYesNoYes
【题解】
这个题刚开始直接跳了,后来做的时候本来想用三分法找山峰,但是TLE了,所以又开始想别的方法,观察了好久终于发现可以双向扫,标记出每个数向左向右能延伸的最大长度,遇到比本身大的就停止计数,一直扫完为止,最后输入查询区间后只要判断左端点是不是小于右端点的计数值就好。
【AC代码】
# include <iostream># include <cstdio># include <cstring># include <algorithm># include <queue># include <vector># include <cmath># define INF 0x3f3f3f3fusing namespace std;const int N = 1e5;int a[N], R[N], L[N];int main(void){ int n, m, i, l, r; while (~scanf("%d %d", &n, &m)) { for (i = 1; i <= n; i++) scanf("%d", &a[i]); R[n] = n; for (i = n-1; i >= 1; i--){ if (a[i] > a[i+1]) R[i] = i; else R[i] = R[i+1]; } L[1] = 1; for (i = 2; i <= n; i++){ if (a[i] > a[i-1]) L[i] = i; else L[i] = L[i-1]; } while (m--){ scanf("%d %d", &l, &r); if (L[r] <= R[l]) printf("Yes\n"); else printf("No\n"); } } return 0; }
- codeforces 279C Ladder(数据技巧)
- [CodeForces 279C] Ladder (DP)
- codeforces 279C C. Ladder(rmq+预处理)
- [CF 279C]Ladder[segment]
- codeforces 463C(对角线技巧)
- Codeforces 868 C. Qualification Rounds (技巧)
- CF 279C Ladder(区间问题)
- C++:类型(HorBar,VerBar,Ladder)
- Codeforces--618C--Constellation(数学几何)(技巧)
- codeforces 348 C. Subset Sums (暴力+技巧)
- Codeforces 849 C. From Y to Y (技巧)
- Codeforces 847 C. Sum of Nestings (技巧)
- CodeForces 552C:Vanya and Scales【技巧】
- CodeForces - 675C Money Transfers (map&技巧)
- C语言读取数据技巧
- Codeforces--658C--Bear and Forgotten Tree 3(模拟&&技巧)(好题)
- Codeforces Round #312 (Div. 2) C. Amr and Chemistry(技巧)
- CodeForces - 552C Vanya and Scales (进制转换&技巧)好题
- [CMD]杀进程
- Ubuntu中设置滚轮滚动方向为自然滚动
- Linux小记
- floodfill
- 前台和后台的相互传值
- codeforces 279C Ladder(数据技巧)
- JavaWeb 实现Excel 的导入导出
- excel导出(检索com类工厂中)8007005
- flex详解
- Android 流式布局之自动换行
- Android记一次头像上传与显示
- Codeforces 831 B Keyboard Layouts
- java学习【web基础-jQuery】
- Pointer Networks 理解