牛客little w and Discretization

news2024/10/5 18:31:39

玩一下样例发现,只要找到mex就可以知道有((1-mex)的值)所在的位置离散化后和原本的值是一样的,所以询问区间的长度-(1-mex)有几个值就是答案,数据范围3e5,莫队+值域分块求区间mex,计算1-mex有几个位置属于这个值域内,a[i] 1e9,但是可以发现a[i]>3e5后离散化必然和原本的值不一样,所以a[i]=3e5+1;

// Problem: little w and Discretization
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/19684/F
// Memory Limit: 524288 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
#define INF (1ll<<60)
using namespace std;
typedef long long ll;
const int N=3e5+9;
const int M=3e5;
int a[N],c[N],bc[N],vis[N],bv[N];
int L[N],R[N],pos[N];
int LL[N],RR[N],PP[N];
int ans[N];
int t,tt;
struct Q{
    int l,r,id;
    friend bool operator < (const Q &a,const Q &b){
        return pos[a.l]^pos[b.l]?pos[a.l]<pos[b.l]:pos[a.l]&1?a.r<b.r:a.r>b.r;
    }
}que[N];
//另一种写法
// void modify(int x,int val){
    // int loc=PP[x];
    // if(!c[x] && val==1){
        // vis[x]=1;
        // bv[loc]++;
    // }
    // if(c[x]==1 && val==-1){
        // vis[x]=0;
        // bv[loc]--;
    // }
    // c[x]+=val;
    // bc[loc]+=val;
// }
/*
c,bc,vis,bv
*/
void add(int pos){
    c[a[pos]]++;
    bc[PP[a[pos]]]++;
    if(c[a[pos]]==1 && c[a[pos]]==1){
    	bv[PP[a[pos]]]++;
    	vis[a[pos]]=1;
    }
}
void del(int pos){
    c[a[pos]]--;
    bc[PP[a[pos]]]--;
    if(c[a[pos]]==0 && !c[a[pos]]){
    	bv[PP[a[pos]]]--;
    	vis[a[pos]]=0;
    }
}
ll query1(int l,int r){
	int p=PP[l];
	int q=PP[r];
	if(p==q){
		for(int i=l;i<=r;i++){
			if(!vis[i]){
				return i;
			}
		}
	}else{
		for(int i=l;i<=RR[p];i++){
			if(!vis[i]){
				return i;
			}
		}
		for(int i=p+1;i<=q-1;i++){///
			if(bv[i]!=RR[i]-LL[i]+1){
				for(int j=LL[i];j<=RR[i];j++){
					if(!vis[j]){
						return j;
					}
				}
			}
		}
		for(int i=LL[q];i<=r;i++){
			if(!vis[i]){
				return i;
			}
		}
	}
	return r+1;
}
ll query2(int l,int r){
	ll res=0;
	int p=PP[l];
	int q=PP[r];
	if(p==q){
		for(int i=l;i<=r;i++){
			res+=c[i];
		}
	}else{
		for(int i=l;i<=RR[p];i++){
			res+=c[i];
		}
		for(int i=p+1;i<=q-1;i++){
			res+=bc[i];
		}
		for(int i=LL[q];i<=r;i++){
			res+=c[i];
		}
	}
	return res;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(a[i]>300000){
            a[i]=300001;
        }
    }
    t=sqrt(n);
    for(int i=1;i<=t;i++){
        L[i]=(i-1)*t+1;
        R[i]=i*t;
    }
    if(R[t]<n){
        t++;
        L[t]=R[t-1]+1;
        R[t]=n;
    }
    for(int i=1;i<=t;i++){
        for(int j=L[i];j<=R[i];j++){
            pos[j]=i;
        }
    }
    tt=sqrt(M);
    for(int i=1;i<=tt;i++){
        LL[i]=(i-1)*tt+1;
        RR[i]=i*tt;
    }
    if(RR[tt]<M){
        tt++;
        LL[tt]=RR[tt-1]+1;
        RR[tt]=M;
    }
    for(int i=1;i<=tt;i++){
        for(int j=LL[i];j<=RR[i];j++){
            PP[j]=i;
        }
    }
    int m;
    cin>>m;
    for(int i=1;i<=m;i++){
        cin>>que[i].l>>que[i].r;
        que[i].id=i;
    }
    sort(que+1,que+1+m);
    int l=1,r=0;
    for(int i=1;i<=m;i++){
        while(que[i].l>l){
			del(l++);
        }
        while(que[i].l<l){
			add(--l);
        }
        while(que[i].r>r){
			add(++r);
        }
        while(que[i].r<r){
			del(r--);
        }
        ans[que[i].id]=(que[i].r-que[i].l+1)-query2(1,query1(1,M));
    }
    for(int i=1;i<=m;i++){
        cout<<ans[i]<<'\n';
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1812284.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mmdeploy环境部署流程

参考&#xff1a;mmdeploy/docs/zh_cn/01-how-to-build/linux-x86_64.md at main open-mmlab/mmdeploy (github.com) 从零入门《openmmlab》mmdeploy[1]环境安装及简单上手_哔哩哔哩_bilibili 我的环境&#xff1a; docker容器&#xff0c;ubuntu20.04&#xff0c;cuda11.7…

迁移学习助力机器学习实践应用

大家好&#xff0c;迁移学习是一种技术&#xff0c;能使机器利用从以前任务中获得的知识来提高对新任务的泛化能力。作为ChatGPT和Google Gemini等模型的核心原理&#xff0c;迁移学习在长文档总结、复杂文章撰写、旅行规划以及诗歌和歌曲创作等重要任务中发挥着关键作用。 本…

Docker 安装gitLab

目录 1. 安装 Docker 2. 拉取 GitLab 镜像 3. 创建并运行 GitLab 容器 4. 登录GitLab 修改下载地址 修改账号密码 前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&#xff0c;我们往往容易…

解决关于git clone 带子模块的项目得到的源码不完整,导致编译失败的解决办法

在使用 git 克隆一个项目的时候&#xff0c;你可能会碰到克隆后编译失败的情况&#xff0c;经过查找&#xff0c;发现原来是缺少一些文件&#xff0c;这些文件都有一个特点&#xff0c;如图&#xff1a; 要解决这个问题&#xff0c;需要在clone 命令的基础上加上一些参数 &…

Nature Communications|基于离子导电和强力蚕丝纤维的智能感知纺织品 (柔性智能织物/可穿戴电子/柔性纤维传感/柔性电子)

2024年4月17日,清华大学张莹莹教授(Yingying Zhang)课题组,在《Nature Communications》上发布了一篇题为“Intelligent perceptual textiles based on ionicconductive and strong silk fibers”的论文。论文内容如下: 一、 摘要 将纺织品赋予感知功能,类似于人类皮肤,…

Linux--08---挂载分区

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.查看系统磁盘分区情况1.lsblk 查看2.fdisk -l 2.挂载未分区磁盘1. 创建分区2. 格式化分区3. 创建挂载点4. 挂载分区5. 更新 /etc/fstab6.验证挂载 3.修改挂载的磁…

0.18微米 BCD 工艺兼容的准垂直功率 DMOS 器件结构参数对 RON,sp 的影响

来源&#xff1a;Influence of Structure Parameters on the RON,sp of Quasi-Vertical Power DMOS Compatible with 0.18μm BCD Process&#xff08;ISPSD 24年&#xff09; 摘要 “Lateral double-diffused MOSFET (LDMOS)是应用于功率电子领域最常见的器件之一,得益于其可…

【论文】2405.Phased Consistency Model(港中文提出了AI绘画加速模型,一步采样生成图像,支持SD1.5,SDXL)

论文&#xff1a;https://arxiv.org/abs/2405.18407 &#xff08;2024.05.30发布&#xff09; 代码&#xff1a;https://github.com/G-U-N/Phased-Consistency-Model 一、论文要解决什么问题&#xff1f;效果如何&#xff1f; (需要先了解LCM模型) (阶段性一致性模型:朝着稳定…

express入门02静态资源托管

目录 1 搭建静态资源结构2 代码助手3 多目录托管4 服务器热启动总结 上一篇我们讲解了使用express搭建服务器的过程&#xff0c;服务器搭建好了之后&#xff0c;除了在地址栏里输入URL发起get请求或者post请求外&#xff0c;通常我们还需要访问静态资源&#xff0c;比如html、c…

一文看懂linux ext4文件系统工作原理

前言 Linux系统中的ext2、ext3、ext4 文件系统&#xff0c;它们都有很强的向后和向前兼容性&#xff0c;可以在数据不丢失的情况下进行文件系统的升级。目前ext4是一个相对较成熟、稳定且高效的文件系统&#xff0c;适用于绝大部分规模和需求的Linux环境。 ext4它突出的特点有&…

修改SubVI的LabVIEW默认搜索路径

在启动顶级VI后&#xff0c;LabVIEW可能会遇到找不到subVI的情况。这通常是由于subVI的路径发生了变化或没有被正确配置。 LabVIEW默认搜索路径 默认情况下&#xff0c;LabVIEW会按以下顺序搜索文件位置&#xff08;*表示LabVIEW将搜索子目录&#xff09;&#xff1a; <t…

PS系统教程15

仿制图章与修饰照片 仿制图章工具使用&#xff08;S&#xff09;使用方法&#xff1a;按住Alt键进行采样选定照片新建图层&#xff08;方便修改&#xff09;按住Alt键&#xff0c;进行吸取进行采样复制 下面那个石柱是我们复制的石柱 多余的部分用历史画笔工具涂抹掉一部分 案…

外汇天眼:Brighter Super 选择 State Street 作为托管和管理合作伙伴

State Street Corporation&#xff08;纽约证券交易所代码&#xff1a;STT&#xff09;今日宣布&#xff0c;其已被选为 Brighter Super 成员所投资的超过300亿澳元基金的托管人和管理员。 State Street 将为 Brighter Super 涵盖多种资产类别的130多个投资组合提供广泛的服务…

一文带你入门 - Qt绘图QPainter

QPaintEvent绘图事件: QPaintEvent 是 Qt 框架中一个重要的事件类&#xff0c;专门用于处理绘图事件。当 Qt 视图组件需要重绘自己的一部分时&#xff0c;就会产生 QPaintEvent 事件。这通常发生在以下几种情况&#xff1a; 1. 窗口第一次显示时&#xff1a;当窗口或控件第一次…

探秘C++ STL中的Stack与Queue:数据结构的艺术与实践

在C的世界里&#xff0c;标准模板库(STL)无疑是一颗璀璨的明珠&#xff0c;它不仅极大地丰富了C的生态系统&#xff0c;更为开发者提供了强大的工具箱。其中&#xff0c;stack和queue作为两种基础而重要的数据结构&#xff0c;扮演着不可或缺的角色。本文将深入剖析这两个容器适…

国内著名的四个“大模型”

关于您提到的国内四大模型&#xff0c;这里为您详细介绍&#xff1a; 文心大模型&#xff1a;文心大模型是百度自主研发的产业级知识增强大模型。它以创新性的知识增强技术为核心&#xff0c;从单模态大模型发展到跨模态&#xff0c;从通用基础大模型到跨领域、跨行业&#xff…

英特尔为何大力押注边缘AI

正如近期历史上所有AI领域的情况一样&#xff0c;边缘AI部署也未能免受指数级增长的影响。 随着钟摆从集中式部署转向分布式部署&#xff0c;AI推动了边缘计算的大部分增长&#xff0c;组织越来越多地希望将AI算法和模型部署到本地边缘设备上&#xff0c;消除了不断依赖云基础设…

程序员们,如何预防大龄危机?

困境 在中国&#xff0c;程序员到了35岁&#xff0c;基本是一个坎&#xff0c;如果你还是通过常规的招聘网或者猎头去找工作&#xff0c;能拿到offer的比例相对低&#xff0c;因为跟新手程序员比&#xff0c;你没有明显的优势。 论薪资&#xff1a; 大龄程序员的薪资要求应该…

3.Nginx配置文件基本介绍

nginx配置文件所在路径&#xff1a;/usr/local/nginx/conf/nginx.conf nginx配置文件有三块&#xff1a; 1.全局块 从配置文件开始到events块之间的内容&#xff0c;主要会设置一些影响nginx服务器整体运行的配置指令。 配置运行nginx服务器的用户(组)允许生成的worker pro…

stm32 Listings和Objects文件夹目录设置

我们在test.c文件里面输入如下代码&#xff1a; #include "sys.h" #include "usart.h" #include "delay.h" int main(void) { u8 t0; Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 uart_i…