CF 171 (div2)C
2013-05-17 19:42
447 查看
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
其实是个简单题,思维混乱时容易想不清楚。简单的预处理出每个点往左和往右的最长不递减序列末尾的编号就可以了。
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <cmath> #define LL long long using namespace std; const int maxn = 100000 + 5; int dp[maxn]; int num[maxn],r[maxn],l[maxn]; int main(){ int n,m,last; while(cin >> n >> m){ for(int i = 1;i <= n;i++) cin >> num[i]; last = 1; for(int i = 2;i <= n;i++){ if(num[i] > num[i-1]){ for(int j = last;j < i;j++) l[j] = last; last = i; } if(i == n){ for(int j = last;j <= n;j++) l[j] = last; } } last = n; for(int i = n-1;i >= 1;i--){ if(num[i] > num[i+1]){ for(int j = last;j > i;j--) r[j] = last; last = i; } if(i == 1){ for(int j = last;j >= 1;j--) r[j] = last; } } for(int i = 0;i < m;i++){ int x,y; cin >> x >> y; if(r[x] >= l[y]) cout << "Yes\n"; else cout << "No\n"; } } return 0; }
相关文章推荐
- CF 171(div2)A
- CF 191 div2
- CF #192(div2)
- Codeforces Round #397 (Div. 1 + Div. 2 combined) 题解(CF765A,CF765B,CF765C,CF765D,CF765E,CF765F)
- 【Codeforces Round 339 (Div 2)D】【暴力 贪心 二分】Skills 最高技能人数乘cm+最低技能乘cf权值最大
- 7/22 CF#173(div2)
- CF 355 div2 C, D 题解 【很好的两道脑洞题】
- CF Beta Round #89 (Div. 2) - Caesar's Legions
- CF 135 div2 A题 k-String
- cf 319 div 2 Modulo Sum 数论+DP
- Borya and Hanabi - CF#253 (Div. 2)C (442A) 状压暴力枚举
- Codeforces Round #171 (Div. 2)
- cf 204 div2 C Jeff and Rounding 模拟
- CF 375(div 2) F题
- CF 353C Find Maximum #205 (Div. 2)
- [cf2015ICLFinalsDiv1J]Ceizenpok’s formula
- cf--------(div1)1A. Theatre Square
- CF--#334-div2--B
- CF 335 div.2-C/div.1-A/605A Sorting Railway Cars
- CF 209 Div2 (C) 快速幂 取分子最小的公约数