CodeForce 279C

本文详细介绍了如何使用C语言解决数组序列判断问题,包括输入数组和查询序列,通过计算序列两端递增和递减的元素数量来判断是否构成梯形序列。代码示例清晰易懂。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好不容易AC了这题(果然是菜鸟-_-|||),,先记录下来再说。

先来看题目:

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 integersa1, a2, ..., an. Also, you've gotm queries, the i-th query is described by two integersli, ri. Numbersli, ri define a subsegment of the original array, that is, the sequence of numbersali, 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 integerx (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 andm (1 ≤ n, m ≤ 105) — the number of array elements and the number of queries. The second line contains the sequence of integersa1, a2, ..., an(1 ≤ ai ≤ 109), where numberai stands for thei-th array element.

The following m lines contain the description of the queries. Thei-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 thei-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

大体思路: 对用户给出的数组数据逐个分析,记录每个数据ai的两个卫星数据,即在ai左边且递减的数p的个数和在ai右边且递增的数的个数q,然后只要query的长度l - 1小于等于query起始位置的q + 结束位置的p即输出Yes,否则输出No。   用一个二维数组来记录pq,简化计算。

解题代码如下:

#include <stdio.h>
#include <vector>
#include <utility>
using namespace std;
int map[100000][2];
int array[100000];

int main(){
	int n, m;
	scanf("%d%d", &n, &m);
	for (int i = 0; i < n; ++i)
		scanf("%d", &array[i]);
	vector<pair<int, int> > que(m);
	for (int i = 0; i < m; ++i)
		scanf("%d%d", &que[i].first, &que[i].second);
	for (int i = 0; i < n; ++i){
		if (i){
			if (array[i] <= array[i - 1]) map[i][0] = map[i - 1][0] + 1;
			else map[i][0] = 0;
		}
	}
	for (int i = n - 1; i >= 0; --i){
		if (i != n - 1){
			if (array[i] <= array[i + 1]) map[i][1] = map[i + 1][1] + 1;
			else map[i][1] = 0;
		}
	}
	for (int i = 0; i < m; ++i){
		int len = que[i].second - que[i].first;
		if (len <= map[que[i].first - 1][1] || 
			len <= map[que[i].second - 1][0] ||
			len <= map[que[i].first - 1][1] + map[que[i].second - 1][0])
			printf("Yes\n");
		else
			printf("No\n");
	}
	return 0;
}


### Codeforces Problem or Contest 998 Information For the specific details on Codeforces problem or contest numbered 998, direct references were not provided within the available citations. However, based on similar structures observed in other contests such as those described where configurations often include constraints like `n` representing numbers of elements with defined ranges[^1], it can be inferred that contest or problem 998 would follow a comparable format. Typically, each Codeforces contest includes several problems labeled from A to F or beyond depending on the round size. Each problem comes with its own set of rules, input/output formats, and constraint descriptions. For instance, some problems specify conditions involving integer inputs for calculations or logical deductions, while others might involve more complex algorithms or data processing tasks[^3]. To find detailed information regarding contest or problem 998 specifically: - Visit the official Codeforces website. - Navigate through past contests until reaching contest 998. - Review individual problem statements under this contest for precise requirements and examples. Additionally, competitive programming platforms usually provide comprehensive documentation alongside community discussions which serve valuable resources when exploring particular challenges or learning algorithmic solutions[^2]. ```cpp // Example C++ code snippet demonstrating how contestants interact with input/output during competitions #include <iostream> using namespace std; int main() { int n; cin >> n; // Process according to problem statement specifics } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值