news 2026/1/18 11:47:00

区间取反与区间数一【牛客tracker 每日一题】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
区间取反与区间数一【牛客tracker 每日一题】

区间取反与区间数一

时间限制:2秒 空间限制:256M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

对于给定的长度为n nn01 0101s ss(下标范围为[ 1 , n ] [1,n][1,n]),你需要构建一个能够动态维护区间和信息的数据结构,使得其能支持:

  1. 区间取反:将[ l , r ] [l,r][l,r]这个区间中的全部元素进行取反操作,即∀ i ∈ [ l , r ] , s i → 1 − s i ∀i∈[l,r],s_i→1−s_ii[l,r],si1si
  2. 区间数一:输出下标在[ l , r ] [l,r][l,r]这个区间中的所有元素值为1 11的元素的个数,即∑ i = l r 1 ( a i = 1 ) ∑_{i=l}^r1_{(a_i=1)}i=lr1(ai=1)

输入描述:

第一行输入两个整数n , q ( 1 ≦ n , q ≦ 5 × 10 5 ) n,q(1≦n,q≦5×10^5)n,q(1n,q5×105)代表01 0101s ss的长度、操作次数。
第二行输入一个长度为n nn01 0101s ( s i ∈ s(s_i∈s(si{0 , 1 0,10,1}) ))
此后q qq行,每行先输入一个整数o p ( 1 ≦ o p ≦ 2 ) op(1≦op≦2)op(1op2)代表操作编号,随后:

输出描述:

对于每一次询问,输出一行一个整数代表区间数一的结果值。保证至少存在一次询问。

示例1

输入:

6 4 100101 1 1 4 2 1 6 1 4 6 2 1 6

输出:

3

解题思路

采用位运算分块策略维护01 0101串,将长度为n nn01 0101串按每64 6464位划分为一个块,用无符号长整型数组b s bsbs存储(1 11对应位设为1 , 0 1,0100 00)。处理区间取反(o p = 1 op=1op=1)时,先对[ l , r ) [l,r)[l,r)范围内的完整块整体按位取反(异或− 1 -11),再分别对左右边界的不完整块,通过异或(1 u l l < < 1ull<<1ull<<(位偏移))− 1 -11取反边界内的位;处理区间统计1 11的个数(o p = 2 op=2op=2)时,先计算右边界块前r位的1 11的数量,减去左边界块前l ll位的1 11的数量,再累加中间完整块的1 11的总数(借助KaTeX parse error: Expected group after '_' at position 1: _̲_builtin_popcou…快速统计每块1 11的个数)。该方法将每次操作的时间复杂度降至O ( n / 64 ) O(n/64)O(n/64),适配n nnq qq5 e 5 5e55e5的规模,高效完成区间取反与1 11的个数统计操作。

代码内容

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefpair<ll,ll>pii;constll p=1e9+7;constll N=2e5+10;ull bs[7813];intmain(){ll n,q;string s;cin>>n>>q>>s;for(ll i=0;i<n;i++){if(s[i]=='1')bs[i>>6]|=1ull<<(i&63);}ll op,l,r,lb,rb;while(q--){cin>>op>>l>>r;l--;lb=l>>6,rb=r>>6;if(op==1){for(ll i=lb;i<rb;i++)bs[i]^=-1;bs[lb]^=(1ull<<(l&63))-1;bs[rb]^=(1ull<<(r&63))-1;continue;}ll res=__builtin_popcountll(bs[rb]&(1ull<<(r&63))-1)-__builtin_popcountll(bs[lb]&(1ull<<(l&63))-1);for(ll i=lb;i<rb;i++)res+=__builtin_popcountll(bs[i]);cout<<res<<endl;}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/14 22:42:13

架构演进过程

一、单体架构优点&#xff1a; 简单&#xff1a;开发部署都很方便&#xff0c;小型项目首选 缺点&#xff1a; 项目启动慢可靠性差可伸缩性差扩展性和可维护性差性能低 二、垂直架构垂直架构是指将单体架构中的多个模块拆分为多个独立的项目。形成多个独立的单体架构。 垂直架构…

作者头像 李华
网站建设 2026/1/10 21:21:58

USACO历年青铜组真题解析 | 2024年2月Milk Exchange

​欢迎大家订阅我的专栏&#xff1a;算法题解&#xff1a;C与Python实现&#xff01; 本专栏旨在帮助大家从基础到进阶 &#xff0c;逐步提升编程能力&#xff0c;助力信息学竞赛备战&#xff01; 专栏特色 1.经典算法练习&#xff1a;根据信息学竞赛大纲&#xff0c;精心挑选…

作者头像 李华
网站建设 2026/1/15 4:34:08

【力扣hot100题】缺失的第一个正数(12)

给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xff1a;范围 [1,2] 中的数字都在数组…

作者头像 李华
网站建设 2026/1/12 2:35:25

每日 AI 评测速递来啦(1.8)

司南Daily Benchmark 专区今日上新&#xff01; RFC Bench 一个用于在真实新闻语境下评估大语言模型金融虚假信息识别能力的评测基准&#xff0c;以段落级别为评测粒度&#xff0c;刻画金融新闻中语义由分散线索共同构成的上下文复杂性。 https://hub.opencompass.org.cn/da…

作者头像 李华
网站建设 2026/1/11 3:46:31

AI+教育创新:Z-Image-Turbo在教学场景中的快速部署

AI教育创新&#xff1a;Z-Image-Turbo在教学场景中的快速部署 作为一名教育科技创业者&#xff0c;你是否想过将AI图像生成技术融入在线课程&#xff1f;无论是自动生成教学插图、创建个性化学习素材&#xff0c;还是让学生通过文字描述快速可视化知识点&#xff0c;Z-Image-Tu…

作者头像 李华
网站建设 2026/1/13 18:37:44

AI生成内容合规指南:基于Z-Image-Turbo云端环境的审核系统

AI生成内容合规指南&#xff1a;基于Z-Image-Turbo云端环境的审核系统 为什么需要AI生成内容审核系统&#xff1f; 随着AI图像生成技术的普及&#xff0c;越来越多的内容平台开始引入AI生成图像。但随之而来的合规风险也不容忽视&#xff1a;不当内容、版权问题、敏感信息等都可…

作者头像 李华