[BZOJ]3110 [ZJOI2013] K大数查询 整体二分

储能逆变器动态无功补偿:从原理到算法实现 本文深入解析了储能逆变器动态无功补偿的核心原理与算法实现。通过四象限运行与解耦控制技术,储能逆变器可在充放电的同时,快速、精准地调节无功功率,有效提升电网电能质量与功率因数。文章详细阐述了从相位调节、容量限制到PI控制算法的完整技术路径,并结合工程实践,探讨了其在光伏/储能系统中的协同控制策略与进阶应用价值。 阅读详情

3110: [Zjoi2013]K大数查询

Time Limit: 20 Sec   Memory Limit: 512 MB
Submit: 10240   Solved: 3053
[ Submit][ Status][ Discuss]

Description

有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c
如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。

Input

第一行N,M
接下来M行,每行形如1 a b c或2 a b c

Output

输出每个询问的结果

Sample Input

2 5
1 1 2 1
1 1 2 2
2 1 1 2
2 1 1 1
2 1 2 3

Sample Output

1
2
1

HINT



【样例说明】

第一个操作 后位置 1 的数只有 1 , 位置 2 的数也只有 1 。 第二个操作 后位置 1

的数有 1 、 2 ,位置 2 的数也有 1 、 2 。 第三次询问 位置 1 到位置 1 第 2 大的数 是

1 。 第四次询问 位置 1 到位置 1 第 1 大的数是 2 。 第五次询问 位置 1 到位置 2 第 3

大的数是 1 。‍


N,M<=50000,N,M<=50000

a<=b<=N

1操作中abs(c)<=N

2操作中c<=Maxlongint


Source

[ Submit][ Status][ Discuss]


HOME Back

  发现整体二分居然如此好用?? 本来以为要树套树的没想到整体二分再用个树状数组就可以了... 好写好调啊.

  答案显然具有二分性, 于是我们考虑尝试一波整体二分. 我们对答案进行二分, 每次判断一个询问的区间比当前二分的值小的数目和该询问的k作比较来判断二分大了还是二分小了. 而修改操作相当于就是区间加减... 这个用线段树可以维护. 然后就是普通的整体二分辣.

  从别人博客里发现这道题有负数的情况可以n - c + 1来扩展成1~2n+1的值域. 然后第k大就变成第k小了, 妙哇妙哇. 只需要在输出的时候再减回来就可以了. 而且树状数组只需要再维护一个差分数组就可以资瓷区间加区间查询?? 新技能get.

#include<bits/stdc++.h>
using namespace std;
typedef long long lnt;
const int maxn = 1e5 + 5;
bool vis[maxn];
lnt c[2][maxn];
int n, m, tot, lim, ans[maxn];
inline const int read() {
	register int x = 0, f = 1;
	register char ch = getchar();
	while (ch < '0' || ch > '9') {if (ch == '-') f = -1; ch = getchar();}
	while (ch >= '0' && ch <= '9') x = (x << 3) + (x << 1) + ch - '0', ch = getchar();
	return f * x; 
}
struct point {
	int x, y, k, id, opt;
}a[maxn], tmp[maxn];
inline void mdy(int k, int x, int val) {
	for (; x <= lim; x += x & -x) c[k][x] += val;
}
inline void modify(int x, int y, int f) {
	mdy(0, x, f), mdy(1, x, f * (x - 1)), mdy(0, y + 1, -f), mdy(1, y + 1, -f * y);
}
inline lnt qry(int k, int x) {
	lnt tmp = 0;
	for (; x; x -= x & -x) tmp += c[k][x];
	return tmp;
}
inline lnt query(int x, int y) {
	return qry(0, y) * y - qry(1, y) - qry(0, x - 1) * (x - 1) + qry(1, x - 1);
}
void solve(int lf, int rg, int L, int R) {
	register int i;
	if (L == R) {
		for (i = lf; i <= rg; ++ i)
			if (a[i].opt) ans[a[i].id] = L;
		return;
	}
	lnt sum = 0;
	int mid = (L + R) >> 1, cnt = 0;
	for (i = lf; i <= rg; ++ i) {
		if (a[i].opt) {
			sum = query(a[i].x, a[i].y);
			if (sum < a[i].k) vis[i] = false, a[i].k -= (int)sum;
			else vis[i] = true, ++ cnt;
		} else if (a[i].k <= mid){
			modify(a[i].x, a[i].y, +1), vis[i] = true;
			cnt ++;
		} else vis[i] = false;
	}
	for (i = lf; i <= rg; ++ i)
		if (!a[i].opt && a[i].k <= mid) modify(a[i].x, a[i].y, -1);
	int l1 = lf, l2 = lf + cnt;
	for (i = lf; i <= rg; ++ i)
		(vis[i]) ? tmp[l1 ++] = a[i] : tmp[l2 ++] = a[i];
	for (i = lf; i <= rg; ++ i) a[i] = tmp[i]; 
	solve(lf, l1 - 1, L, mid), solve(l1, l2 - 1, mid + 1, R);
}
int main() {
	n = read(), m = read();
	register int i;
	for (i = 1; i <= m; ++ i) {
		a[i].opt = read() - 1, a[i].x = read(), a[i].y = read(), a[i].k = read();
		if (a[i].opt) a[i].id = ++ tot;
		else a[i].k = n - a[i].k + 1, lim = max(lim, a[i].k);
	}
	solve(1, m, 1, lim);
	for (i = 1; i <= tot; ++ i) printf("%d\n", n - ans[i] + 1);
	return 0;
}


Python 爬虫实战:微信搜一搜内容深度爬取(含搜索结果解析与企业级架构设计) 在信息爆炸的时代,微信搜一搜已成为海量信息获取的重要入口。无论是个人知识探索,还是企业舆情监控,掌握微信搜一搜内容的深度爬取能力具有巨大价值。本文将从基础原理到企业级实现,全面解析微信搜一搜爬虫的开发过程。 阅读详情

相关推荐

Jenkins中文显示不全?三步搞定Locale插件+汉化包的正确安装姿势

本文针对Jenkins界面中文显示不全问题,提供从原理到实战的深度解决方案。文章详细解析了Locale插件与中文语言包的核心机制,并分步指导如何通过配置JVM环境、正确安装插件及执行深度排查,彻底解决汉化顽疾,实现Jenkins界面的完美中文显示。

weixin_42611310的博客 259

bzoj 3110 [Zjoi2013]K大数查询 整体二分

bzoj 3110 [Zjoi2013]K大数查询 整体二分

Rising_shit的博客 383

Arduino+L298N电机驱动模块避坑指南:从接线到PWM调速的5个常见错误

本文详细解析了使用Arduino与L298N电机驱动模块时,从电源配置、跳线帽使用到PWM调速的5个常见错误与避坑指南。重点阐述了如何正确分离逻辑与电机电源、拔掉ENA/ENB跳线帽以实现PWM调速、理解H桥接线逻辑以控制直流电机正反转,并提供优化代码与散热建议,帮助开发者稳定驱动电机。

rust6ferris的博客 561

BZOJ 3110 [Zjoi2013]K大数查询(整体二分)

3110: [Zjoi2013]K大数查询 Time Limit: 20 SecMemory Limit: 512 MBSubmit: 11654Solved: 3505[Submit][Status][Discuss] Description 有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c ...

Aaronliu17008的博客 223

算法基础之数组双指针(Leetcode题型归纳)

数组双指针(Leetcode题型归纳)1.前言2.双指针基础3.相向双指针3.1定义3.2真题分析3.2.1两数之和(1)3.2.2两数之和-输入有序数组(167)3.2.3三数之和(15)3.2.4最接近的三数之和(16)3.2.5四数之和(18)3.2.6盛最多水的容器(11)3.2.7有效三角形的个数(611)4.同向双指针-快慢指针4.1定义4.2真题分析4.1.1删除排序数组中的重复项(26)4.1.2移除元素(27)4.1.3删除排序数组中的重复项(80)4.1.4移动零(283)4.1.5数组

Buluchacha的博客 1034

cocos2dx中DrawNode画线锯齿和非凸多边形填充

记录一下在cocos2dx中使用DrawNode所遇到的2个问题 1.画线锯齿问题 ios版本下,在AppController.mm中设置CCEAGLView的multiSampling和numberOfSamples。如下图 CCEAGLView *eaglView = [CCEAGLView viewWithFrame: [window bounds]

hello-world 5413

BZOJ3110:[ZJOI2013]K大数查询(整体二分版)

浅谈离线分治算法:https://www.cnblogs.com/AKMer/p/10415556.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=3110 同BZOJ1901,不过是把单点修改区间询问改成区间修改区间询问罢了。 我怕会\(TLE\),就用了区间修改区间询问的树状数组。如果还不会这个的,可以去看看这篇博客。 ...

aga28832的博客 171

2025华为OD 面试手撕代码真题【字符串至多删除一个字符,是否能构成回文串】

2025华为OD 面试手撕代码真题【字符串至多删除一个字符,是否能构成回文串】

MISAYAONE的博客 1703

bzoj 3110[Zjoi2013]K大数查询 - 整体二分

3110: [Zjoi2013]K大数查询 Time Limit:20 SecMemory Limit:512 MB Description 有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。 Input...

155

Java零基础之多线程篇:线程间如何通信?

随着计算机技术的发展,多线程编程已经成为现代软件开发中的一个重要方向。在多线程编程中,线程间的通信是一个非常关键的问题。在Java开发语言中,Java提供了一些机制来实现线程间的通信,帮助开发者协调不同线程之间的执行顺序和数据交换。本文将介绍Java多线程编程中的线程间通信的相关知识。首先,我们将从简介开始,介绍线程间通信的基本概念和原理。然后,我们将通过源代码解析的方式,深入探讨Java中实现线程间通信的方法。接着,我们将给出一些应用场景案例,展示线程间通信在实际开发中的应用。

喵手的博客 1557

Open3D点云算法与点云深度学习案例汇总(长期更新)

Open3D-python算法专栏文章汇总,长期更新算法原理与实战案例。

纵马踏花向自由 7463

bzoj3110 [Zjoi2013]K大数查询(整体二分+线段树)

bzoj3110 [Zjoi2013]K大数查询原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3110题意: 有N个位置,M个操作。 操作有两种,: 1 a b c的形式,表示在第a个位置到第b个位置,每个位置加入一个数c。 2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。数据范围 N,M<=50000,

Bfk的博客 443

UNET改进77:全网首发-添加CFBlock |

本文介绍了在UNet模型中集成CFBlock注意力机制的实现方法。主要分为三个步骤:1) 创建CFBlock模块,包含卷积注意力机制和MLP;2) 在UNet连接处添加注意力模块;3) 在卷积层中嵌入注意力机制。具体实现包括:定义Conv、MLP和ConvolutionalAttention等基础模块,构建CFBlock核心结构;在UNet跳跃连接处插入注意力模块;将注意力机制整合到DoubleConv和Down模块中。该方法通过在不同位置引入注意力机制,可有效提升模型的特征提取能力。代码实现使用PyTor

AIcurator的博客 388

[BZOJ3110][ZJOI2013]K大数查询(整体二分)

BZOJ Luogu sol 整体二分,其实很简单的啦。 对所有询问二分一个答案mid,把所有修改操作中数字大于mid的做一个区间覆盖(区间加1) 查询就是区间查询 然后左右分一分即可 注意是第k大 然后关于树状数组的区间修改区间查询,有一篇学长的博客链接,其实原理还是蛮简单的。 比线段树好写还常数小比yyb跑得快 code #include<cstdio> #include...

abcyan1235的博客 143

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

BZOJ 3110: [Zjoi2013]K大数查询【整体二分】

整体二分,加一个维护区间求和 注意一下mid的划分,跟第k小是有区别的 l~mid是左边,mid+1~r是右边,找&gt;mid的数的个数 讨论的时候不注意一不小心就WA到飞起~ #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;cctype&gt; #include&lt;algorithm&gt; #define maxn 5...

Master.Yi的博客 229

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【整体二分】[ZJOI 2013] bzoj3110 K大数查询

题目点这里 树套树题解点这里 调完这个。。一晚上居然就又过去了。。。TAT 先说下效率 我的树套树是283136 kb 7556 ms(永久化标记的)分治是3148 kb 1296 ms _(:з)∠)_代码长度的话。。两个都差不多T_____T 思路: 整体二分这玩意。。和cdq分治挺像的样子。。 从我的理解来说。。。cdq分治是用[l, mid]更新[mid

每天心塞一点点 4723

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

[ZJOI 2013] bzoj3110 K大数查询 (整体二分)

昨天晚上写了一道最裸的cdq分治的题陌上花开,自己做出来的,感觉又有了一定的领悟。感觉其实cdq分治就相当于主席树的用处,主席树又叫函数式线段树,顾名思义可以拿来当一个函数用,相当于建出来之后就一劳永逸了,来一个询问解决一个。但是有些题目并不要求在线,所以并不需要把一整个主席树都建出来,而是每次都在线地去找它的前缀,然后cdq分治保证了每个点都有不超过logn个前缀,并且在计算i的时候它的前缀已经

AZUI _ oi memories 2919

【BZOJ 3110】 [Zjoi2013]K大数查询 整体二分+树状数组区间修改

额,只能说整体二分是一个很神奇的东西,首先既然是二分虽然加了一个整体听起来变得立马高大上起来,但是还是需要从最基本的二分思路出发才能理解。首先如果对于只有一次地查询操作的话我们很容易就可以想到二分的写法,二分权值然后加上cheak操作判断比当前大的值有多少个,然后不断缩小二分的区间直到最后l==r。类似的,在整体二分我们同样用到类似的思想,这里简单模拟一下操作过程,希望能帮组大家理解; 首先用一

pbihao的博客 1389

BZOJ 3110: [Zjoi2013]K大数查询 树套树 整体二分

title BZOJ 3110 LUOGU 3332 题意: 有 \(N\) 个位置, \(M\) 个操作。操作有两种,每次操作如果是: 1 a b c:表示在第 \(a\) 个位置到第 \(b\) 个位置,每个位置加上一个数 \(c\) ; 2 a b c:表示询问从第 \(a\) 个位置到第 \(b\) 个位置,第 \(c\) 大的数是多少。 analysis 看到题后就想到...

dilu0653的博客 169

【BZOJ】【P3110】【Zjoi2013】【K大数查询】【题解】【整体二分】

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3110 整体二分真是

退役狗的专栏 866

【BZOJ3110】[ZJOI2013]K大数查询(整体二分)

题目: BZOJ3110 分析: 整体二分模板题…… 先明确一下题意:每个位置可以存放多个数,第一种操作是“加入 (insert) ”一个数而不是“加上 (add) ”一个数。 首先考虑只有一次询问的情况。设询问的名次为kkk,我们二分出一个答案midmidmid,然后遍历所有修改。建立一棵区间线段树(下标是位置的线段树),对于一个给[a,b][a,b][a,b]区间加入一个数ccc的修改,如果c...

Inspector_Javert 306

BZOJ3110:[ZJOI2013]K大数查询(整体二分)

Description 有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c。如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。 Input 第一行N,M 接下来M行,每行形如1 a b c或2 a b c Output 输出每个询问的结果 Sampl...

weixin_33962923的博客 87

【cdq分治】【整体二分】bzoj 3110: [Zjoi2013] HYSBZ - 3110 K大数查询

题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3110 题意:有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c。如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。注意是加入一个数,不是让这个数去求和。 题解:虽然是看cdq找到...

weixin_30952535的博客 183

bzoj 3110: [Zjoi2013]K大数查询(树套树,整体二分)

3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 4020  Solved: 1547 [Submit][Status][Discuss] Description 有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2

clover_hxy的博客 1098

[整体二分] BZOJ3110: [Zjoi2013]K大数查询

题意N个位置,M个操作。操作有两种: 1.在第a个位置到第b个位置,每个位置加入一个数c。注意是加入,也就是说这里的一个位置能放下多个数。 2.询问从第a个位置到第b个位置 的所有数中,第K大的数是多少。题解经典的整体二分题。 把所有操作排成一个序列,并二分答案mid。把当前操作序列中的所有插入的数大于mid的插入都执行一遍区间+1,对于每次询问即可求一次区间和得到比mid大的数有几个,

Lynstery's blog 605

【BZOJ3110】【ZJOI2013】【整体二分、树套树模板题】K大数查询

Description 有N个位置,M个操作。操作有两种: 1. 每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c; 2. 如果是2 a b c形式,表示询问从第a个位置到第b个位置,第c大的数是多少。 Solution 2.1 整体二分 看了好久的整体二分,一直脑残不能理解,感觉挺晕的,,其实挺好理解的,就是把修改和询问放在一起二分答案,每...

დ♂Hany01's Blog Space♂ღ 306
上一篇: [BZOJ]2527 [POI2011] Meteors 整体二分
下一篇: [BZOJ]2300 [HAOI2011] 防线修建 动态维护凸包
MaxMercer
博客等级 码龄10年 55粉丝 261原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值