首先定义 $g[i][j]$ 表示 $i$ 前面(不包括 $i$)第一个第 $j$ 位是 $1$ 的数的位置。可以随便转移。

再定义 $f[i][j]$ 表示 $i$ 前面(包括 $i$)第一个第 $j$ 位是 $1$ 的数,且能通过题面的操作跳到 $i$ 的位置。

也能随便转移。先判断 $i$ 自己可不可以,可以就直接搞,不可以就找一个中介位 $k$($a_i$ 的第 $k$ 位必须是 $1$),$f[g[i][k]][j]$ 一定是可以跳到的。因为 $i$ 肯定能从 $g[i][k]$ 跳到(都有第 $k$ 位),$g[i][k]$ 肯定能从 $f[g[i][k]][j]$ 跳到(定义)。

对于询问,找一个中介位 $k$($a_l$ 的第 $k$ 位必须是 $1$),那么 $r$ 可以从 $f[r][k]$ 跳到。当且仅当 $f[r][k]\ge l$ 时,$f[r][k]$ 可以从 $l$ 跳到。 所以判一下所有的 $k$ 即可。

时间复杂度 $O(n\log^2 v+q\log v)$。(代码实现优秀一点似乎可以一个 $\log$?)

#include<bits/stdc++.h>
using namespace std;
const int maxn=;
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
inline int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
return f?-x:x;
}
int n,q,a[maxn],f[maxn][],g[maxn][],hhh[];
int main(){
n=read();q=read();
FOR(i,,n) a[i]=read();
FOR(i,,n){
FOR(j,,) g[i][j]=hhh[j];
FOR(j,,) if((a[i]>>j)&) hhh[j]=i;
}
FOR(i,,n){
FOR(j,,) if((a[i]>>j)&) f[i][j]=i;
else FOR(k,,) if((a[i]>>k)&) f[i][j]=max(f[i][j],f[g[i][k]][j]);
}
while(q--){
int l=read(),r=read();
bool flag=false;
FOR(i,,) if((a[l]>>i)&) flag|=f[r][i]>=l;
puts(flag?"Shi":"Fou");
}
}

CF1168C And Reachability(DP)的更多相关文章

  1. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  2. lightOJ 1047 Neighbor House (DP)

    lightOJ 1047   Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...

  3. UVA11125 - Arrange Some Marbles(dp)

    UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...

  4. 【POJ 3071】 Football(DP)

    [POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted ...

  5. 初探动态规划(DP)

    学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...

  6. Tour(dp)

    Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...

  7. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)

    .navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...

  8. Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)

    Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...

  9. 最长公共子序列长度(dp)

    /// 求两个字符串的最大公共子序列长度,最长公共子序列则并不要求连续,但要求前后顺序(dp) #include <bits/stdc++.h> using namespace std; ...

随机推荐

  1. Spring源码系列 — 构造和初始化上下文

    探索spring源码实现,精华的设计模式,各种jdk提供的陌生api,还有那么点黑科技都是一直以来想做的一件事!但是读源码是一件非常痛苦的事情,需要有很大的耐心和扎实的基础. 在曾经读两次失败的基础上 ...

  2. net core中引用GDAL

    <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</Ou ...

  3. Google开发者F12工具面板-network详解

    1 开发者工具面板    面板上包含了Elements面板.Console面板.Sources面板.Network面板.Performance面板.Memory面板.Application面板.Sec ...

  4. Ext.id

    Ext.id([el,prefix]) el: 是要添加id的元素,值可以为元素id值.HTMLElement对象或Element对象:prefix:是自定义的id前缀字符串 传入el:如果el已经有 ...

  5. java并发查询数据

    并发服务 package com.springboot_android.thread; import com.project_entity.bean.DeviceRecrodBean; import ...

  6. 家电制造业中MES系统发挥的作用

    人们对MES系统在家电生产领域的应用并不陌生,这是离散型MES应用的一个重要领域. 如空调.冰箱.电视.洗衣机等生产加工中均具有批量制造.多品种小批量.单件生产的等特点,很多企业也是以以订单.合同为核 ...

  7. maven 学习---使用Maven运行单元测试

    要通过Maven运行单元测试,发出此命令: mvn test 这会在你的项目中运行整个单元测试. 案例学习 创建两个单元测试,并通过 Maven 的运行它.参见一个简单的 Java 测试类: pack ...

  8. weblogic删除域

    彻底删除weblogic域的方法: 例如:删除域名为:fm_ump的域 第一步,删除域注册记录: [bofm@UAT02-BIZ-ZJCG-AP-008 Middleware]$ cd /home/s ...

  9. 在js中==和===的区别

    “==”:叫相等运算符 “===”:叫严格运算符 它们两有什么区别呢? == :表示值相等则都为true ===:表示 不仅要值相等,双方类型也要相等才为true 例子如下: js代码如下: // “ ...

  10. 21个极大提高开发效率的VS Code快捷键

    摘要: 高效使用VS Code! 作者:前端小智 原文:21 个VSCode 快捷键,让代码更快,更有趣 Fundebug经授权转载,版权归原作者所有. 注意:自己尝试的时候,Mac(17, pro) ...