首页 > 其他分享 >st表二分按位与_cf900_E. Iva & Pav

st表二分按位与_cf900_E. Iva & Pav

时间:2024-03-02 21:33:56浏览次数:27  
标签:const Iva Pav int st lt 按位 define

目录

题目概述

原题参考:E. Iva & Pav
给出长度为n的数组和m次询问,每次询问包括一个左区间l和一个整数k,要求给出最大的右区间的值使得al & al+1 &... & ar >= k

思路想法

其实对二进制的几种运算随意看一下,可以发现:随着长度的增加,按位与的结果是保持单调不增,按位或则是保持单调不减,因此,对于一个区间[lt, rt],它的元素的按位与是有单调性的,单调性就可以想着一个二分答案,我们可以先对数组进行预处理,记录每一次数组到之后的一个区间的按位与的值,然后对于每一次询问,可以使用一个极大值按位与,进行二分答案

参考代码

#include <bits/stdc++.h>
using namespace std;
#define FAST_IO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define endl '\n'
#define pll pair<long long, long long>
#define pii pair<int, int>
#define vi vector<int>
#define vl vector<long long>
#define ll long long
#define ull unsigned long long
const ll INF = 9187201950435737471;
const int inf = 2139062143;
const ll mod = 1e9 + 7;
const double eps = 1e-6;
const double PI = acos(-1.0);
const int N = 2e5+7;
int n, m, a[N], st[N][27];
int query(int lt, int res) {
    ll cmp = (1ll << 34) - 1;
    for(int i=20; i>=0; i--) {
        if((cmp&st[lt][i]) >= res) {
            cmp &= st[lt][i];
            lt += (1<<i);
        }
    }
    if((cmp&a[lt]) < res) lt --;
    return lt;
}
void solve() {
    cin >> n;
    for(int i=1; i<=n; i++) {
        cin >> a[i];
        st[i][0] = a[i];
    }
    for(int j=1; j<=20; j++) {
        for(int i=1; i+(1<<j)-1<=n; i++) 
            st[i][j] = (st[i][j-1] & st[i+(1<<(j-1))][j-1]);
    }
    cin >> m;
    while(m --) {
        int res, lt;
        cin >> lt >> res;
        if(a[lt] < res) cout << -1 << " ";
        else cout << query(lt, res) << " ";
    }
    for(int i=1; i<=n; i++) {
        for(int j=0; j<=20; j++) a[i] = 0, st[i][j] = 0;
    }
    cout << endl;
}
int main() {
#ifdef xrl
    freopen("in.txt", "r", stdin), freopen("out.txt", "w", stdout);
#endif
    FAST_IO;
    int t = 1;
    cin >> t;
    while(t --) solve();
#ifdef xrl
    cout << "Time used = " << (double)(clock() * 1.0 / CLOCKS_PER_SEC) << "s";
#endif
    return 0;
}

做题反思

这个还真是老题中的老题(对我而言),很早之前就挂在我的主页那里,一直没有解决,看到之前写的暴力有点想笑,有意思。今天突然想把他尝试解决,打开看了一下题目,想到了区间的几种操作和二分,开开心心写完。呸,其实调了一会bug,原因是其中的一个按位与和大于的优先级的问题

标签:const,Iva,Pav,int,st,lt,按位,define
From: https://www.cnblogs.com/notalking569/p/18049268

相关文章

  • 随笔记录篇——C++iostream库 以及std
    这篇文章非原创,来自我学习过程中看到的其他博主发的一些资料,解决了我的疑问,在此进行整理。C语言的标准输入输出库是stdio.h库,是一个函数库,而不是类库。其中包含了我们其中所用的scanfpringf都是一些独立的全局函数,因为C语言是不支持类的。C++的标准输入输出库iostream是一个类......
  • Go 100 mistakes - #92: Writing concurrent code that leads to false sharing
      ......
  • pytest踩坑汇总
     pytest简易教程汇总,详见:https://www.cnblogs.com/uncleyong/p/17982846问题一:pytest参数化时出现unicode编码问题详见:https://www.cnblogs.com/uncleyong/p/18022091 pycharm中执行 配置文件pytest.ini中添加:disable_test_id_escaping_and_forfeit_all_rights_to_......
  • 使用STM32CubeMX创建工程
    1,选择芯片新建工程 2.时钟模块的设置分别设置HSE,LSE,MCO 3.时钟系统配置分别配置PLL,SYSCLK,AHB,APB1,APB2等等,配置修改如下红色标记部分 4.Cortex内核配置分别配置SYS(DEBUG),NVIC(优先级分组) 5.GPIO引脚配置我的板子的原理图的PB5引脚是LED0  6.修改工程配......
  • STM32 | STM32到底是什么?(第一天)
    零基础STM32第一天一、认知STM321、STM32概念STM32:意法半导体基于ARM公司的Cortex-M内核开发的32位的高性能、低功耗单片机。ST:意法半导体M:基于ARM公司的Cortex-M内核的高性能、低功耗单片机32:32位单片机2、STM32开发的产品STM32开发的产品:无人机、扫地机器人、3D打......
  • The 2023 ICPC Asia Macau Regional Contest (The 2nd Universal Cup. Stage 15: Maca
    Preface最幽默的一集这场开局感觉三个人都有点发昏了,前3h30min就出了两个题,有种要打铁了的感觉后面想着干脆保个银牌稳扎稳打吧,没想到后面1h连着出了四个题成功冲到银首最后徐神好像也会G这个博弈了,如果前面不犯病的话感觉还真有机会出7题的说A.(-1,1)-Sumplete徐神基本被......
  • PostgreSQL初体验及其与MySQL的对比
    因为工作的原因接触到了pgsql数据库,对PostgreSQL的体系和运维操作也有了一定的了解。PostgreSQL在官网上标称为世界上最先进的开源数据库,而MySQL在官网上标称的是世界上最流行的开源数据库,可见PostgresSQL还是比较高调的。一、PostgreSQL初体验首先是数据库的安装,PostgreSQL官网......
  • Elastic学习之旅 (5) 倒排索引和Analyzer分词
    大家好,我是Edison。上一篇:ES文档的CRUD操作重要概念1:倒排索引在学习ES时,倒排索引是一个非常重要的概念。要了解倒排索引,就得先知道什么是正排索引。举个简单的例子,书籍的目录页(从章节名称快速知道页码)其实就是一个典型的正排索引。而一般书籍的末尾部分的索引页,则是一个典型......
  • k8s master不可以被调度,修改deploy配置让这个可以单独调度上去
    给两个节点添加标签,让pod调度上去,但是kubectldescribepod 发现报错了,因为master不可以被调度,kube002也是设置了污点禁止被调度了WarningFailedScheduling4m33s(x2over9m34s)default-scheduler0/4nodesareavailable:1node(s)haduntoleratedtaint{key:k......
  • 关于STM32Fx部分引脚不可以正常输出高低电平的解决办法(不可以正常使用)
    一、概述在一次电路版测试中,发现stm32的部分引脚不可以正常的输出高低电平,刚开始以为是板子没有焊接好所以导致的经过多次的测试,发现电路版没问题。当时就想不清楚了,后面就问学长,还有实验室的学长一起测试。刚开始我们经过测试,认为是SCL的问题,认为在某个地方该引脚被......