codeforces --- 279C Ladder
2014-03-23 10:40
253 查看
C. Ladder
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
You've got an array, consisting of n integers a1, a2, ..., an. Also, you've got m queries, 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.
Input
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.
Output
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.
Sample test(s)
input
output
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
You've got an array, consisting of n integers a1, a2, ..., an. Also, you've got m queries, 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.
Input
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.
Output
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.
Sample test(s)
input
8 6 1 2 1 3 3 5 2 1 1 3 2 3 2 4 8 8 1 4 5 8
output
Yes Yes No Yes No Yes 思路:dp[i]表示a[i]之前连续的比a[i]大的数的个数,rdp[i]表示a[i]之后连续的比a[i]大的数的个数。如果dp[st] + rdp[end] >= end - st + 1,则是Yes,否则No。
#include<iostream> #include<cstdio> #include<cstring> #define MAX 100005 using namespace std; int a[MAX], dp[MAX], rdp[MAX]; int main(){ int n, Q, st, end; /* freopen("in.c", "r", stdin); */ while(~scanf("%d%d", &n, &Q)){ memset(dp, 0, sizeof(dp)); memset(rdp, 0, sizeof(rdp)); memset(a, 0, sizeof(a)); for(int i = 1;i <= n;i ++) scanf("%d", &a[i]); for(int i = 1; i <= n;i ++){ if(a[i] <= a[i-1]) dp[i] = dp[i-1] + 1; else dp[i] = 1; } for(int i = n;i >= 1;i --){ if(a[i] <= a[i+1]) rdp[i] = rdp[i+1] + 1; else rdp[i] = 1; } for(int i = 0;i < Q;i ++){ scanf("%d%d", &st, &end); if(rdp[st] + dp[end] >= end - st + 1) printf("Yes\n"); else printf("No\n"); } } return 0; }
相关文章推荐
- codeforces 279C Ladder(数据技巧)
- [CodeForces 279C] Ladder (DP)
- CodeForces 279C Ladder (RMQ + dp)
- CF 279C Ladder(区间问题)
- [CF 279C]Ladder[segment]
- Codeforces 279C
- Codeforces 279C
- codeforces 279C C. Ladder(rmq+预处理)
- CodeForces 279C
- CodeForces 56E-Find the Path(技巧)
- Codeforces 592A PawnChess 【水题】
- CodeForces 687C The Values You Can Make
- ACM篇:Codeforces 460 B -- Little Dima and Equation
- Codeforces 816E Karen And SuperMarket 树形背包
- codeforces 884B Japanese Crosswords Strike Back
- Codeforces 458B Distributed Join
- codeforces 592D(树DP)
- CodeForces 518A
- (状压dp)codeforces 327E 580D
- codeforces 799C Fountains 线段树