首页 > 其他分享 >区间 mex 问题

区间 mex 问题

时间:2023-06-04 13:55:34浏览次数:33  
标签:cnt int mid 问题 ++ add ans 区间 mex

可以考虑以下 P2709 的做法。

先用莫队取下出现在 \([l_i,r_i]\) 的位置的数,然后二分求得 \(ask(x)=x\) 的最大 \(x\) 就是答案。

注意 \(0\) 不能加入树状数组,于是先给所有数加 \(1\)。

块长取 \(n^{0.55}\) 最佳。

#include<bits/stdc++.h>
using namespace std;
const int N = 200010; int n, m, cnt[N], in[N], a[N];
#define W while
struct BIT {
	int tr[N]; int lbt(int x) {return x & (-x);}
	void add(int x, int k) {for(; x < N; x += lbt(x)) tr[x] += k;}
	int query(int x) {int sum = 0; for(; x; x -= lbt(x)) sum += tr[x]; return sum;}
} B;
void add(int x) {if(!cnt[x]) B.add(x, 1); cnt[x]++;}
void del(int x) {if(cnt[x] == 1) B.add(x, -1); cnt[x]--;}
int ask() {
	int l = 1, r = N - 1, ans = 0;
	while(l <= r) {
//		cout << l << ' ' << r << '\n';
		int mid = l + r >> 1;
		if(B.query(mid) == mid) ans = mid, l = mid + 1;
		else r = mid - 1;
	}
	return ans;
}
struct Q {int l, r, id;} q[N]; int ans[N];
bool cmp(Q a, Q b) {return in[a.l] != in[b.l] ? a.l < b.l : a.r < b.r;}
int main() {
	ios::sync_with_stdio(0); cin >> n >> m;
	for(int i = 1; i <= n; i++) cin >> a[i], a[i]++; int len = pow(n, 0.55);
	for(int i = 1; i <= n; i++) in[i] = (i + len - 1) / len; int l = 1, r = 0;
//	for(int i = 1; i <= n; i++) cout << in[i] << ' '; cout << '\n';
	for(int i = 0; i < m; i++) cin >> q[i].l >> q[i].r, q[i].id = i; sort(q, q + m, cmp);
	for(int i = 0; i < m; i++) {
		W(r < q[i].r) add(a[++r]); W(r > q[i].r) del(a[r--]);
		W(l < q[i].l) del(a[l++]); W(l > q[i].l) add(a[--l]);
		ans[q[i].id] = ask();
	}
	for(int i = 0; i < m; i++) cout << ans[i] << '\n';
	return 0;
}

标签:cnt,int,mid,问题,++,add,ans,区间,mex
From: https://www.cnblogs.com/Stitch0711/p/17455598.html

相关文章

  • 虚谷数据库语法问题
    使用V11版本1、插入多条数据问题需要把插入数据的中间逗号去掉你图上的这个用法我们在v12的发行版上已经支持了,你那边报错是因为你现在使用的是v11吧INSERTINTOCLASS(CLASSID,CLASSNAME)VALUES(333,'666')(777,'888');2、连接字符串concat函数CONCAT(S1,s2)concat的参数......
  • 皇后问题2
    #include<iostream>usingnamespacestd;intarr[10][10];//用于存储棋盘以及之后的皇后摆放位置intans;//存储最后的答案booljudge(intx,inty)//用于判断这个地方能否放置皇后{inti,j;for(j=1;j<=......
  • Angular 应用解决跨域访问的问题
    在前后台分离的应用中,Angular与Java是一对好搭档。但是如果是分开部署应用,则势必会遇到跨域访问的问题。什么是跨域启动应用之后,有些浏览器会提示如下告警信息:No'Access-Control-Allow-Origin'headerispresentontherequestedresource.Origin'http://localhost:4200'i......
  • “AIR SDK 0.0: AIR SDK location “...\devsdks\AIRSDK\Win” does not exist.”
    导入AS3项目时提示“AIRSDK0.0:AIRSDKlocation“D:\ProgramFiles\Adob5eFlashBuilder4.7\eclipse\plugins\com.adobe.flexbuilder.flex_4.7.0.349722\devsdks\AIRSDK\Win”doesnotexist.”是AS3项目找不见AIRSDK.打开项目配置ActionScriptBuildPath,路径出错......
  • linux 性能自我学习 ———— cpu 快速定位问题 [六]
    前言主要介绍一下cpu如何快速定位问题。正文cpu的一些性能指标:1.cpu使用率cpu使用率描述了非空闲时间占总cpu时间的百分比,根据cpu上运行任务的不同,又被分为用户cpu、系统cpu、i/o等待cpu、软中断、硬中断。用户cpu使用率,包括用户态cpu使用率,和低优先级用户态cpu使用......
  • [刷题笔记] ybt1255:迷宫问题
    题目传送门Solution数据范围很小,一共才\(5\times5\),所以乱搞做法很多比如我一开始就先bfs单纯跑最短路,然后dfs找路径但是忘回溯被嘲讽其实可以边bfs边记录路径,因为bfs是按层数搜的,所以第一次到达终点的路径一定是最优的。那么如何记录路径呢?我原来用pair,经教练指导发现可以......
  • 解决谷歌验证码问题
    浏览器右键F12,打开控制台,输入以下代码: !(function(){"usestrict";document.querySelectorAll("script").forEach(function(e){if(e.src.indexOf("googleapis.com")>=0||e.src.indexOf("themes.googleuserconten......
  • 强化学习:连续控制问题中Actor-Critic算法的linear baseline
    最近在看连续控制问题,看到了一个Actor-Critic算法中手动扩展features和设置linearbaseline的方法,这些方法源自论文:《BenchmarkingDeepReinforcementLearningforContinuousControl》。  对于低维的features我们可以手动扩展:  代码实现:returntorch.cat([observations,ob......
  • 【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client
    问题描述在AzureKubernetes服务中,创建一个InternalLoadBalancer服务,使用以下yaml内容:internallb.yamlapiVersion:v1kind:Servicemetadata:name:ilb-myappannotations:service.beta.kubernetes.io/azure-load-balancer-internal:"true"spec:type:LoadBala......
  • Java基础知识:面试官必问的问题
    数据类型基本类型byte/8char/16short/16int/32float/32long/64double/64boolean/~boolean只有两个值:true、false,可以使用1bit来存储,但是具体大小没有明确规定。JVM会在编译时期将boolean类型的数据转换为int,使用1来表示true,0表示false。JVM支持boolean......