zoukankan      html  css  js  c++  java
  • Codeforces 232E

    题意:
    这里写图片描述
    思路:
    这里写图片描述
    这里写图片描述

    //By SiriusRen
    #include <cstdio>
    #include <bitset>
    #include <vector>
    using namespace std;
    int n,m,q;
    char map[505][505],ans[600005];
    struct Node{int x1,y1,x2,y2,id;}jy;
    vector<Node>vec;
    bitset<505>a[505][505],b[505][505];
    void solve(int l,int r,vector<Node>v){
        int mid=(l+r)>>1,size=v.size();if(!size||l>r)return;
        for(int i=mid;i>=l;i--){
            for(int j=m;j;j--){
                a[i][j].reset();
                if(map[i][j]=='#')continue;
                if(i==mid)a[i][j][j]=1;
                else a[i][j]|=a[i+1][j];
                if(j!=m)a[i][j]|=a[i][j+1];
            }
        }
        for(int i=mid;i<=r;i++){
            for(int j=1;j<=m;j++){
                b[i][j].reset();
                if(map[i][j]=='#')continue;
                if(i==mid)b[i][j][j]=1;
                else b[i][j]|=b[i-1][j];
                if(j!=1)b[i][j]|=b[i][j-1];
            }
        }
        vector<Node>v1,v2;
        for(int i=0;i<size;i++){
            jy=v[i];
            if(jy.x2<mid)v1.push_back(jy);
            else if(jy.x1>mid)v2.push_back(jy);
            else ans[jy.id]=(a[jy.x1][jy.y1]&b[jy.x2][jy.y2]).any();
        }
        solve(l,mid-1,v1),solve(mid+1,r,v2);
    }
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)scanf("%s",map[i]+1);
        scanf("%d",&q);
        for(int i=1;i<=q;i++)
            jy.id=i,scanf("%d%d%d%d",&jy.x1,&jy.y1,&jy.x2,&jy.y2),vec.push_back(jy);
        solve(1,n,vec);
        for(int i=1;i<=q;i++)puts(ans[i]?"Yes":"No");
    }

    这里写图片描述

  • 相关阅读:
    redis配置引发的问题
    String类的split()方法
    修改mysql编码配置文件不生效
    mysql性能优化小知识点
    limit使用
    mysql执行顺序
    记录一个不知名的错误
    子数组最大和及下标
    maven项目中不能加载java目录下的配置文件
    判断树是否为搜索树
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532058.html
Copyright © 2011-2022 走看看