CF1168C
CF1168C
从后往前扫一遍维护\(f[x][k]\)表示从开始x至少要走到那个位置才能到达一个第\(k\)位是1的数
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
int n,m,a[310001],w[20][20],e[20],f[310001][20],x,y,d[20];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
memset(w,0x3f,sizeof(w));
memset(f,0x3f,sizeof(f));
for(int i=n;i>=1;i--)
{
memset(e,0,sizeof(e)); memset(d,0x3f,sizeof(d)); int ct=0;
for(int j=0;j<=18;j++) if(a[i]&(1<<j)) e[++ct]=j,w[j][j]=i;
for(int j=1;j<ct;j++)
for(int k=j+1;k<=ct;k++) w[e[j]][e[k]]=w[e[k]][e[j]]=i;
for(int j=0;j<=18;j++)
for(int k=1;k<=ct;k++) d[j]=min(d[j],w[e[k]][j]);
for(int j=0;j<=18;j++)
for(int k=1;k<=ct;k++) w[e[k]][j]=d[j];
for(int j=1;j<=ct;j++)
for(int k=0;k<=18;k++) f[i][k]=min(f[i][k],w[e[j]][k]);
}
for(;m;m--)
{
scanf("%d%d",&x,&y); int B=0;
for(int k=0;k<=18;k++) if(a[y]&(1<<k)) if(f[x][k]<=y) B=1;
if(B) printf("Shi\n");
else printf("Fou\n");
}
}
CF1168C的更多相关文章
- CF1168C And Reachability 【构造,dp】
题目链接:洛谷 题目描述:给出$n$个数$a_i$,若$i<j$且$a_i & a_j>0$,则$i$到$j$连一条有向边,$q$次询问,询问从$l$开始是否能到达$r$. 数据范 ...
- CF1168C And Reachability(DP)
首先定义 $g[i][j]$ 表示 $i$ 前面(不包括 $i$)第一个第 $j$ 位是 $1$ 的数的位置.可以随便转移. 再定义 $f[i][j]$ 表示 $i$ 前面(包括 $i$)第一个第 $ ...
- 在$CF$水题の记录
CF1158C CF1163E update after CF1173 很好,我!expert!掉rating了!! 成为pupil指日可待== 下次要记得合理安排时间== ps.一道题都没写的\(a ...
随机推荐
- shell编程:sed的选项
sed [参数] [partern/commond] file 标准输出 | sed sed [参数] [partern/commond] -n :使用安静(silent)模式.在一般 sed 的用法 ...
- python内存管理及垃圾回收
一.python的内存管理 python内部将所有类型分成两种,一种由单个元素组成,一种由多个元素组成.利用不同结构体进行区分 /* Nothing is actually declared to b ...
- python基础--冒泡排序
1.冒泡排序 1.首先用一张图来形象描述一下冒泡排序: 2.废话不多说,直接上代码 # 1.导入随机模块 import random # 2.定义一个列表,列表内的元素为20个100以内的随机整数 l ...
- hdu1158 Employment Planning(dp)
题目传送门 Employment Planning Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- LeetCode Linked List Easy 21. Merge Two Sorted Lists
Description Merge two sorted linked lists and return it as a new list. The new list should be made b ...
- Mac中的brew
最近要研究字体识别tesseract,才了解到brew,惭愧惭愧. 1.brew是一个软件包管理工具,类似于centos下的yum或者ubuntu下的apt-get,非常方便,免去了自己手动编译安装的 ...
- shell位置参数处理举例
- 西里尔字 俄语 - Cyrillic
https://zh.wikipedia.org/wiki/%E8%A5%BF%E9%87%8C%E5%B0%94%E5%AD%97%E6%AF%8D 其他编码[编辑] 其他适用西里尔字母的字符编码系 ...
- JDBC、ibatis(mybatis)、Hibernate有什么不同?
①JDBC编程流程固定,同时将sql语句和java代码混在了一起,经常需要拼凑sql语句,细节很繁琐: ②ibatis(mybatis)它不完全是一个ORM框架,因为MyBatis需要程序员自己编写S ...
- CSS 3D 的魅力
作者 | 子慕大诗人 来源 | www.cnblogs.com/1wen/p/9064011.html 前言: 最近玩了玩用css来构建3D效果,写了几个demo,所以博客总结一下. 在阅读 ...