CF
来源:互联网 发布:英文原版书推荐 知乎 编辑:程序博客网 时间:2024/04/29 06:59
1.题目描述:
During the lesson small girl Alyona works with one famous spreadsheet computer program and learns how to edit tables.
Now she has a table filled with integers. The table consists of n rows and m columns. By ai, j we will denote the integer located at the i-th row and the j-th column. We say that the table is sorted in non-decreasing order in the column j if ai, j ≤ ai + 1, j for all i from 1 to n - 1.
Teacher gave Alyona k tasks. For each of the tasks two integers l and r are given and Alyona has to answer the following question: if one keeps the rows from l to r inclusive and deletes all others, will the table be sorted in non-decreasing order in at least one column? Formally, does there exist such j that ai, j ≤ ai + 1, j for all i from l to r - 1 inclusive.
Alyona is too small to deal with this task and asks you to help!
The first line of the input contains two positive integers n and m (1 ≤ n·m ≤ 100 000) — the number of rows and the number of columns in the table respectively. Note that your are given a constraint that bound the product of these two integers, i.e. the number of elements in the table.
Each of the following n lines contains m integers. The j-th integers in the i of these lines stands for ai, j (1 ≤ ai, j ≤ 109).
The next line of the input contains an integer k (1 ≤ k ≤ 100 000) — the number of task that teacher gave to Alyona.
The i-th of the next k lines contains two integers li and ri (1 ≤ li ≤ ri ≤ n).
Print "Yes" to the i-th line of the output if the table consisting of rows from li to ri inclusive is sorted in non-decreasing order in at least one column. Otherwise, print "No".
5 41 2 3 53 1 3 24 5 2 35 5 3 24 4 3 461 12 54 53 51 31 5
YesNoYesYesYesNo
In the sample, the whole table is not sorted in any column. However, rows 1–3 are sorted in column 1, while rows 4–5 are sorted in column 3.
给出n*m矩阵,每次查询l ~ r 的行区间,问你其中的m列是否存在某一列呈不递减趋势
3.解题思路:
最开始看成行,结果卡了很久,快结束了才发现,以后看题要仔细!!然后就是注意坑点是1 <= n * m <= 100000 ,如果暴力可能会MLE,而且不预处理肯定会T的
做法就是vector存矩阵,对每一列dp用单调栈维护第i行最左边的下标,那么每次查询l ~ r直接判断ans[r] 是不是 <= l就行了,貌似这题用线段树更快?看来需要提升姿势啊
4.AC代码:
#include <bits/stdc++.h>#define INF 0x3f3f3f3f#define maxn 100100#define N 1111#define eps 1e-6#define pi acos(-1.0)#define e 2.718281828459#define mod (int)1e9 + 7using namespace std;typedef long long ll;vector<int> a[maxn];int ans[maxn], tmp[maxn];int main(){#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);long _begin_time = clock();#endifint n, m, k;scanf("%d%d", &n, &m);memset(ans, 0x3f, sizeof(ans));for (int i = 1; i <= n; i++){a[i].push_back(0);for (int j = 1; j <= m; j++){int x;scanf("%d", &x);a[i].push_back(x);}}for (int j = 1; j <= m; j++){int first = 1;tmp[1] = 1;for (int i = 2; i <= n; i++){if (a[i][j] < a[i - 1][j])first = i;tmp[i] = first;}for (int i = 1; i <= n; i++)ans[i] = min(ans[i], tmp[i]);}scanf("%d", &k);while (k--){int l, r;scanf("%d%d", &l, &r);if (ans[r] <= l)puts("Yes");elseputs("No");}#ifndef ONLINE_JUDGElong _end_time = clock();printf("time = %ld ms.", _end_time - _begin_time);#endifreturn 0;}
- CF
- CF
- cf
- cf
- CF
- CF
- CF
- CF
- CF
- CF
- cf
- CF
- cf
- cf
- cf ***
- CF
- CF
- CF
- 静态链表 初始化 定位 Malloc Free 插入 删除
- Sudoku Killer HDU-1426
- ACM练习训练——零起点学算法76——绝对公正的裁判
- Tensorflow入门:Linear Regression
- CSS 3--filter
- CF
- git分布式学习日志(持续更新)
- 1022. D进制的A+B (20)
- 使用 sql server 2008 需要开启的服务
- nginx+memchaced
- Linux sudo相关
- Binary Tree Longest Consecutive Sequence
- Spring Boot 集成 FreeMarker 详解案例
- BZOJ 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚