zoukankan      html  css  js  c++  java
  • CF #401 (Div. 2) C.Alyona and Spreadsheet (思维)

    题意:给你n行m列的数组,和k次的询问,问从l行到r行是否存在一个非递增的列

    思路:看到这道题的数据量我们就知道直接暴力不可取,所以我们采用了预处理的方法,我们记录下来每一行的最长的非递减的列的开头的哪个行,比如num[i]=k;表示到第i行的最长的非递减的列是从第k行开始的,在每一次的询问中我们只需要比较num[r]的值与l的值就可以了;

    代码:

    #include <cstdio>
    #include <cmath>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    using namespace std;
    
    const int maxn=100005;
    
    int main()
    {
        int a[maxn],b[maxn],c[maxn];
        int n,m;
        while(cin>>n>>m)
        {
            for(int i=1;i<=n;i++)
            {
                c[i]=i;
                for(int j=1;j<=m;j++)
                {
                    int x;
                    scanf("%d",&x);
                    if(x<a[j]) b[j]=i;
                    a[j]=x;
                    if(c[i]>b[j])
                    c[i]=b[j];
                }
            }
            int k;
            cin>>k;
            while(k--)
            {
                int r,l;
                scanf("%d %d",&l,&r);
                if(c[r]<=l)
                cout<<"Yes"<<endl;
                else cout<<"No"<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    留言板
    文件操作1
    JQUERY与JS的区别
    PHP 练习租房
    PHP 投票练习
    PHP,单项查询及多项查询
    PHP 增删改查 import!!
    PHP 数据访问
    PHP 对象及其三大特性
    正则表达式和数组
  • 原文地址:https://www.cnblogs.com/simplekinght/p/6580750.html
Copyright © 2011-2022 走看看