首页 > 其他分享 >CF1878E Iva & Pav

CF1878E Iva & Pav

时间:2023-10-06 19:11:43浏览次数:33  
标签:CF1878E le 200005 Pav int mid ST ans Iva

思路

要求从一个点开始最远可以选择那个点使得两点之间的数字的与大于等于 \(k\),最开始想到的是提前预处理出每个点往后若干位的与,因为与只可能变小不可能变大,所以可以二分找到最远的位置,但是这样无论时间还是空间都会爆掉,所以我们考虑优化一下这个办法。

既然不能把每个点的后面的位置的与全部算出来,那么我们可以只算一部分,所以想到了 ST 表。

至于无解,如果当前位置的数本身就比 \(k\) 小就一定无解,否则就一定有解。

想到了 ST 表和二分,这道题应该就不难了。

AC code

#include<bits/stdc++.h>
using namespace std;
int T,n,a[200005],q,l,k,st[200005][35],lo[200005],L,R,mid,ans,le;
int main()
{
	for(int i=2;i<=200000;++i) lo[i]=lo[i/2]+1;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		for(int i=1;i<=n;++i) scanf("%d",&a[i]),st[i][0]=a[i];
		for(int i=1;i<=30;++i) for(int j=1;j+(1<<i)-1<=n;++j) st[j][i]=st[j][i-1]&st[j+(1<<(i-1))][i-1];//ST表预处理
		scanf("%d",&q);
		while(q--)
		{
			scanf("%d%d",&l,&k);
			if(a[l]<k){printf("-1 ");continue;}//判无解
			L=l,R=n;
			while(L<=R)//二分找最远位置
			{
				mid=L+R>>1,le=lo[mid-l+1];
				if((st[l][le]&st[mid-(1<<le)+1][le])>=k) ans=mid,L=mid+1;//与重复一个数不会造成影响,所以这里ST表范围重复不影响
				else R=mid-1;
			}
			printf("%d ",ans);
		}
		puts("");
	}
	return 0;
}

标签:CF1878E,le,200005,Pav,int,mid,ST,ans,Iva
From: https://www.cnblogs.com/One-JuRuo/p/17744853.html

相关文章

  • SoK: Secure E-Voting with Everlasting Privacy
    ABSTRACTVoteprivacyisafundamentalright,whichneedstobeprotectednotonlyduringanelection,orforalimitedtimeafterwards,butfortheforeseeablefuture.Numerouselectronicvoting(e-voting)protocolshavebeenproposedtoaddressthischa......
  • E. Iva & Pav
    E.Iva&Pav把每一项的数拆分成32位二进制,然后求前i项第j位二进制为1的前缀和,如果区间范围内的1等于区间范围,则是可行的,乘上对应位置的大小,每一位求和判断与k的大小二分+前缀和点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineLLlonglongconstintN......
  • [题解]CF1878E Iva & Pav
    CF是没题考了吧,每场都出二进制拆位。思路首先我们可以二分\(r\),因为\(r\)越大,按位与一定只会小于等于\(r\)小的情况。那么,我们可以用\(num_{i,j}\)记录\(a_j\)第\(i\)位的二进制情况。如果我们对\(num_{i,j}\)做一个前缀和,如果\(num_{i,r}-num_{i,l-1}=r......
  • Adobe Captivate 9.0下载(adobe屏幕录制软件)下载 各个版本下载
    AdobeCaptivate是一款综合性创作工具,可为家庭用户、学生和专业人士提供简化的电子学习创建平台,用于创建交互式教育内容,例如软件演示、分支场景、随机谜题、软件模拟等。AdobeCaptivate在创建和发布电子学习内容方面拥有超过15年的经验,如今已发展成为一个强大的创作和项目导出工......
  • Adobe Captivate 2019下载 各个版本下载
    AdobeCaptivate2019是Adobe公司出品的一款专业的屏幕录制软件,它可以轻松创建诸如应用程序模拟模型、产品演示、拖放模块以及软技能和培训内容,实现Flash格式的内容交互。软件操作简单,任何不具有编程知识或多媒体技能的人都能够快速创建功能强大的软件演示和培训内容。软件地址:......
  • java中private是什么意思
    在java中,private的意思为“私有的”,是一种访问控制修饰符,用于修饰类、属性和方法。用private修饰的类成员,只能被该类自身的方法访问和修改,而不能被任何其他类(包括该类的子类)访问和引用;因此,private修饰符具有最高的保护级别。......
  • Signature|privileged permissions not in privapp-permissions whitelist异常处理
    1、问题背景及现象背景说明:软件系统:Android10需求处理:SystemUI添加截屏录屏功能问题现象:添加完修改后无法开机SystemUI/AndroidManifest.xml部分修改如下:<!--ScreenRecording--><uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE"/><uses......
  • pycharm 无法加载文件activate.ps1的原因分析及解决方法
    这篇文章主要介绍了pycharm报错提示:无法加载文件\venv\Scripts\activate.ps1,因为在此系统上禁止运行脚本,解决方法终端输入get-executionpolicy,回车返回Restricted即可,需要的朋友可以参考下 pycharm报错提示:无法加载文件\venv\Scripts\activate.ps1,因为在此系统上禁止运行脚本......
  • VIVADO VCS VERDI联合仿真
    ./tb_test.shverdi-ffilelist.f-ssf*.fsdb&......
  • 02使用vivado和Modelsim进行仿真
    软件版本:vitis2021.1(vivado2021.1)操作系统:WIN1064bit硬件平台:适用AMD-XILINXA7/K7/Z7/ZU/KU系列FPGA登录"米联客"SOC|SOC社区-www.uisrc.com视频课程、答疑解惑!1概述仿真是每个初学者必须学会的一项技能,因为FPGA程序编译时间往往很长,所以对程序进行仿真就成为了校验程序......