CF1168C And Reachability

CF1168C And Reachability

And Reachability - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目大意

给定一个长度为 n 的数组 a

你可以选择一个长度为 k 的数组 p

p1=x,pk=y

x<yapi&api+1>0 时,我们称 x,y 为可到达的

现在给你 q 组询问,每个询问问你 x,y 是否可以到达

思路

dp

ci,j 为二进制下的 ai 的第 j 位是否为 1

gi,j[1,i1] 中第 j 位为 1 且离 i 最近的点

那么

gi,j=(ci1,j=1)?i1:gi1,j

fi,j[1,i1] 中第 j 位为 1 且能够到达 i 的最近的一个点

  • 需要中转站

    fi,j=max(fi,j,fgi,k,j)(ci,k=1)

  • 不需要中转站

    fi,j=max(fi,j,fi,k)(ci,k==1 and cgi,k,j=1)

code

#include <bits/stdc++.h>
#define fu(x , y , z) for(int x = y ; x <= z ; x ++)
#define fd(x , y , z) for(int x = y ; x >= z ; x --)
using namespace std;
const int N = 3e5 + 5;
int n , q;
int a[N] , f[N][25] , g[N][25] , c[N][25];
int read () {
    int val = 0;
    char ch = getchar ();
    while (ch > '9' || ch < '0') ch = getchar ();
    while (ch >= '0' && ch <= '9') {
        val = val * 10 + (ch - '0');
        ch = getchar();
    }
    return val;
}
void pre (int i , int x) {
    fu (j , 1 , 20) {
        if (x & 1) c[i][j] = 1;
        x >>= 1;
    }
}
int main () {
    freopen ("and.in" , "r" , stdin);
    freopen ("and.out" , "w" , stdout);
    n = read () , q = read ();
    fu (i , 1 , n) {
        a[i] = read ();
        pre (i , a[i]);
    }
    fu (i , 1 , n) {
        fu (j , 1 , 20) {
            if (c[i - 1][j]) g[i][j] = i - 1;
            else g[i][j] = g[i - 1][j];
        }
    }
    fu (i , 1 , n) {
        fu (j , 1 , 20) {
            fu (k , 1 , 20) {
                if (!c[i][k]) continue;
                int x = g[i][k];
                if (c[x][j]) f[i][j] = max (f[i][j] , x);
                else f[i][j] = max (f[i][j] , f[x][j]);
            }
        }
    }
    int l , r , flg = 0;
    while (q --) {
        flg = 0;
        scanf ("%d%d" , &l , &r);
        fu (i , 1 , 20) {
            if (c[l][i] && f[r][i] >= l) {
                puts ("Shi");
                flg = 1;
                break;
            }
        }
        if (flg) continue;
        puts ("Fou");
    }
    return 0;
}
posted @   2020fengziyang  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示