首页 > 学院 > 开发设计 > 正文

codeforces777C

2019-11-06 08:42:03
字体:
来源:转载
供稿:网友

http://codeforces.com/PRoblemset/problem/777/C

题意: 给你一个n*m的矩阵,之后有Q次询问,试问每次询问的L和r表示第L行和第r行,在第L行和第R行之间是否存在一列元素保持非递增,有则Yes,反之则No

思路: a[i]初始设为i,则为,c[j]表示第j列的那个数,就是一列一列写。b[j]表示第J列最小值所在行数。每次输入完成一个数后,都会判断第j列最小的元素所在行数是否在第i行?如果比a[i]小,则维护最小的a[i]即可

#include <bits/stdc++.h>#define maxs 202020#define mme(i,j) memset(i,j,sizeof(i))using namespace std;int a[maxs],c[maxs],b[maxs];int main(){ int n,m,x; cin>>n>>m; for(int i=1;i<=n;i++) { a[i]=i; for(int j=1;j<=m;j++) { cin>>x; if(x<c[j]) { b[j]=i; } c[j]=x; if(a[i]>b[j]) a[i]=b[j]; } } int l,r,p; cin>>p; while(p--) { cin>>l>>r; if(a[r]<=l) puts("Yes"); else puts("No"); } return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表