Codeforces 777C:Alyona and Spreadsheet(预处理)
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 \(a_{i, 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 \(a_{i, j} ≤ a_{i + 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 \(a_{i, j} ≤ a_{i + 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!
Input
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 \(a_{i, j} (1 ≤ a_{i, j} ≤ 10^9)\).
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 \(l_i\) and \(r_i\) \((1 ≤ l_i ≤ r_i ≤ n)\).
Output
Print "Yes" to the \(i\)-th line of the output if the table consisting of rows from \(l_i\) to \(r_i\) inclusive is sorted in non-decreasing order in at least one column. Otherwise, print "No".
Example
Input
5 4
1 2 3 5
3 1 3 2
4 5 2 3
5 5 3 2
4 4 3 4
6
1 1
2 5
4 5
3 5
1 3
1 5
Output
Yes
No
Yes
Yes
Yes
No
Note
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\times m\)的矩阵,判断第\(l\)行~第\(r\)行中是否有一列是非递减的
思路
如果这题用暴力来写的话,时间复杂度为:\(O(n\times \sum^{k}_{i=1}(r_i-l_i))\),有题目可知,这个时间是肯定过不去的
所以我们可以预处理:预处理从每一行往上最高到哪一行,可以保持有至少一个非递增的序列
先处理每一列的每一个位置向上的非递增序列可以延伸到哪个位置,然后每一列的对应位置去一个最大值,即可得到该行可以向上延伸的最大位置。
每次输入\(l,r\),只需判断\(r\)行向上的位置是否小于等于\(l\)即可
代码
注意$ (1 ≤ n·m ≤ 100 000)$,可以直接用vector
进行存,也可以用一维数组
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define ms(a,b) memset(a,b,sizeof(a))
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=1e6+10;
const int mod=1e9+7;
const int maxm=1e3+10;
using namespace std;
vector<int>ve[maxn];
// 当前行能往上延伸的最高位置
int can[maxn];
// 当前列能往上的最高位置
int line[maxn];
int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
srand((unsigned int)time(NULL));
#endif
ios::sync_with_stdio(false);
cin.tie(0);
int n,m;
cin>>n>>m;
int x;
for(int i=0;i<m;i++)
ve[0].push_back(0);
for(int i=1;i<=n;i++)
for(int j=0;j<m;j++)
cin>>x,ve[i].push_back(x);
for(int i=1;i<=n;i++)
{
can[i]=i;
for(int j=0;j<m;j++)
{
int now_num=ve[i][j];
int up_num=ve[i-1][j];
if(now_num<up_num)
line[j]=i;
can[i]=min(can[i],line[j]);
}
}
int t;
cin>>t;
while(t--)
{
int l,r;
cin>>l>>r;
if(can[r]>l)
cout<<"No\n";
else
cout<<"Yes\n";
}
#ifndef ONLINE_JUDGE
cerr<<"Time elapsed: "<<1.0*clock()/CLOCKS_PER_SEC<<" s."<<endl;
#endif
return 0;
}
Codeforces 777C:Alyona and Spreadsheet(预处理)的更多相关文章
- Codeforces 777C Alyona and Spreadsheet
C. Alyona and Spreadsheet time limit per test:1 second memory limit per test:256 megabytes input:sta ...
- Codeforces 777C Alyona and Spreadsheet(思维)
题目链接 Alyona and Spreadsheet 记a[i][j]为读入的矩阵,c[i][j]为满足a[i][j],a[i - 1][j], a[i - 2][j],......,a[k][j] ...
- Codeforces 777C - Alyona and Spreadsheet - [DP]
题目链接:http://codeforces.com/problemset/problem/777/C 题意: 给定 $n \times m$ 的一个数字表格,给定 $k$ 次查询,要你回答是否存在某 ...
- codeforces 777C.Alyona and Spreadsheet 解题报告
题目链接:http://codeforces.com/problemset/problem/777/C 题目意思:给出一个 n * m 的矩阵,然后问 [l, r] 行之间是否存在至少一列是非递减序列 ...
- Codeforces Round #401 (Div. 2) C Alyona and Spreadsheet —— 打表
题目链接:http://codeforces.com/contest/777/problem/C C. Alyona and Spreadsheet time limit per test 1 sec ...
- C Alyona and Spreadsheet Codeforces Round #401(Div. 2)(思维)
Alyona and Spreadsheet 这就是一道思维的题,谈不上算法什么的,但我当时就是不会,直到别人告诉了我,我才懂了的.唉 为什么总是这么弱呢? [题目链接]Alyona and Spre ...
- codeforces 777C
C.Alyona and Spreadsheet During the lesson small girl Alyona works with one famous spreadsheet compu ...
- Codeforces777C Alyona and Spreadsheet 2017-05-04 17:46 103人阅读 评论(0) 收藏
C. Alyona and Spreadsheet time limit per test 1 second memory limit per test 256 megabytes input sta ...
- Codeforces E. Alyona and a tree(二分树上差分)
题目描述: Alyona and a tree time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
随机推荐
- Kubernetes-存储(一)
前言 本篇是Kubernetes第十二篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战. Kubernetes系列文章: Kubernetes介绍 Kubernetes环境搭建 Kubern ...
- 大数据学习day17------第三阶段-----scala05------1.Akka RPC通信案例改造和部署在多台机器上 2. 柯里化方法 3. 隐式转换 4 scala的泛型
1.Akka RPC通信案例改造和部署在多台机器上 1.1 Akka RPC通信案例的改造(主要是把一些参数不写是) Master package com._51doit.akka.rpc impo ...
- windows Notepad++ 上配置 vs 编译器 , 编译并运行
windows 中 配置 vs编译器 在Linux下,Kris是倾向于在终端中使用gcc和g++来编译C/C++的,在Windows下相信很多人都是选择臃肿的Visual Studio,我亦不免如此. ...
- 【leetcode】222. Count Complete Tree Nodes(完全二叉树)
Given the root of a complete binary tree, return the number of the nodes in the tree. According to W ...
- 基本类型、引用类型NPE异常
1.null是Java中的关键字,像public.static.final.它是大小写敏感的,你不能将null写成Null或NULL,编译器将不能识别它们然后报错. 2.就像每种原始类型都有默认值一样 ...
- Maven配置大全
maven项目打jar包(带依赖) <build> <plugins> <plugin> <artifactId>maven-assembly-plug ...
- 【Spark】【设置】关闭INFO提示
目的:关闭INFO提示 方法:通过修改配置文件实现 操作文件:Hadoop/conf/log4j.properties.template 操作1:复制模板文件使用 cp $SPARK_HOME/con ...
- 华为HMS Core图形引擎服务携手三七游戏打造移动端实时DDGI技术
在2021年HDC大会的主题演讲中提到,华为HMS Core图形引擎服务(Scene Kit)正协同三七游戏一起打造实时DDGI(动态漫反射全局光照:Dynamic Diffuse Global Il ...
- 粒子群算法-PSO
粒子群优化算法 1. 背景知识 1995年美国社会心理学家Kennedy和电气工程师Eberhart共同提出粒子群优化算法(Particle Swarm Optimization, PSO).PSO算 ...
- how2heap学习(一)
接下来的时间会通过how2heap学习堆的知识,这个系列可能会更新很多篇,因为每天学习到的东西要保证吸收消化,所以一天不会学习很多,但是又想每天记录一下.所以开个系列. first_fit 此题的源码 ...