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;
    }
  • 相关阅读:
    c#委托与事件
    c#垃圾回收与资源管理
    c#接口、抽象类
    c#集合类、ArrayList、queue
    c#位运算
    c#索引器
    c#使用属性封装
    c#继承
    c#数组参数
    Lambda表达式
  • 原文地址:https://www.cnblogs.com/simplekinght/p/6580750.html
Copyright © 2011-2022 走看看