首页 > 其他分享 >2023南海区区赛模拟(初中组)T3删除区间

2023南海区区赛模拟(初中组)T3删除区间

时间:2023-12-09 19:33:20浏览次数:29  
标签:删除 19 lo T3 50 hi 区区 2023 区间

第3题     删除区间 查看测评数据信息

开始给你N个元素的数组(下标从1开始),数组里的数是1,2,3,…,N,然后执行D次删除操作。每次删除操作给一个区间[lo, hi],要求删除下标位置从lo到hi的数,数组里的数据个数会减少hi-lo+1个。

例如,N=8,第1次删除操作区间是[3 4],结果为”1,2,5,6,7,8”; 第2次删除操作区间是[4 5],结果为”1,2,5,8”。

最后,输出第M位的数字是什么。如果剩余的数不够M个,输出-1。

输入格式

 

(多组数据形式)

第1行:一个不超过10 的正整数K,表示有K组任务。

下面有K组数据,每组数据格式为:

 第一行有3个正整数:N M D 。N范围为[1, 2000000000],M范围为[1, N],D范围为[1, 50]。

 下面有D行,每行是用”-“连接(没有空格)的2个整数: lo-hi。保证1 ≤ lo ≤ hi ≤ n。

 

输出格式

 

输出第M位的数字,或-1。

 

 

输入/输出例子1

输入:

3

8 3 2

3-4

4-5

100 13 3

19-50

19-50

19-19

100 39 3

19-50

19-50

19-19

 

 

输出:

5

13

-1

 

 

样例解释

 

先考虑暴力,10分

#include <bits/stdc++.h>
using namespace std;

int t, d, x, y, n, m;
map<int, int> a;
int main()
{
	scanf("%d", &t);
	while (t--)
	{
		int k=0, flag=0;
		scanf("%d %d %d", &n, &m, &d);
		for (int i=1; i<=n; i++) a[i]=i;

		for (int i=1; i<=d; i++)
		{
			scanf("%d-%d", &x, &y);
			for (int j=1; j<=n; j++)
			{
				if (a[j]!=0) k++;
				if (k>=x && k<=y) a[j]=0;
				if (k>y) break;
			}
			k=0;
			/*for (int i=1; i<=n; i++)
				cout<<a[i]<<' ';
			cout<<endl;*/
		}
		
		for (int i=1; i<=n; i++)
		{
			if (a[i]!=0) k++;
			if (k==m)
			{
				flag=1;
				printf("%d\n", i);
				break;
			}
		}	
		if (flag==0) printf("-1\n");
	}
	return 0;
}

  分析:这道题其实毕竟有意思,可以逆推,也可以模拟

模拟和上一题差不多(可能?) 分裂区间

设有[1,8]区间,删除[3,4],分裂成2个区间,变成125678,也就是[1,2]、[5,8]

再删除[4,5],分裂成3个区间,[1,2]不变,125678,变成1278,也就是[1,2][5,5][8,8]

 再删除[1,3],变成[8,8]这个区间

 我们分析一下,红色笔圈出的区间为删除区间,发现每次区间数量变化只可能+1,-1,+0

 

 带入具体数字,有区间[1,100][150,200][300,500],删除[51,150],如下

 再删[49,52]

 这就是分裂过程了,正为模拟,那么反着呢,为倒推

 

图解:

我们可以设有区间[1,7]删除[1,3]、[2,3]区间, 求第二个数

正推很容易,但是不好写(我个人觉得),考虑逆推

因为最后要我们求第2个数,假设最后有一堆数(1-7),然后第2个数为2,删除的区间是2,3,我们删除2,3后,第二个数为4,然后跟着4往上,删除1,3,第二个数为7

因为我们相求第2个数,所以就要“跟踪”,从后面往前面推,想知道第二个数,就得知道4,想知道4在上一次操作的第几个数,就得继续往上推

例子2:

 

这就是2个分析了

 

标签:删除,19,lo,T3,50,hi,区区,2023,区间
From: https://www.cnblogs.com/didiao233/p/17891355.html

相关文章

  • 2023 (ICPC) Jiangxi Provincial Contest -- Official Contest
    Preface伟大的徐神终于来和我们一起训练了,然后这场中期一眼秒了可做题中最难的G虽然中间因为我搞错了徐神的意图给徐神原来正确的主席树删了搞了个错的上去浪费了快一个小时但无所谓最后结束前把所有可做题全写了强势捧杯(打弱省省赛打出自信了属于是)A.DrillWoodtoMakeFi......
  • 2023南海区区赛模拟(初中组)T1询问"好数"
    第1题   询问"好数" 查看测评数据信息如果整数a=b^2或者a =b^3,其中正整数b>=1,那么a就是"好数"。即:如果a是平方数或者立方数,那么a就是"好数"。现在有n个询问,第i个询问给出一个整数x[i],表示询问1至x[i]范围内有多少个"好数"。输入格式 第一行,一个整数n。1<=......
  • 集训队胡策2023-2024补题记录
    CTT结束后发现自己胡策题都没咋补,这下尴尬了。主要原本胡策就打着玩的(怎么CTT平均难度比胡策还要简单啊.jpg。还是随便写几篇题解吧。先来个补全进度表,根据胡策OJ或qoj通过情况来评判:测试赛(10.22)A+BProblem奥林匹克五子棋元旦激光炮Day1(10.23)优惠购......
  • 2023-2024-1 20231403 《计算机基础与程序设计》第十一周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里2023-2024-1计算机基础与程序设计第十一周作业)这个作业的目标自学《计算机科学概论》第15,16章,《C语言程序设计》第10章作业正文https://www.cnblogs.com/lsrmy......
  • 2023-12-09:用go语言,给你两个整数数组 arr1 和 arr2, 返回使 arr1 严格递增所需要的最小
    2023-12-09:用go语言,给你两个整数数组arr1和arr2,返回使arr1严格递增所需要的最小「操作」数(可能为0)。每一步「操作」中,你可以分别从arr1和arr2中各选出一个索引,分别为i和j,0<=i<arr1.length和0<=j<arr2.length,然后进行赋值运算arr1[i]=arr2[j]。如果......
  • 7. 2023-11-20 12:29:32,542 [tornado.general :456 ][WARNING ][3052] Got events f
     这个警告表明Tornado检测到了有事件(events)被发送到一个已经关闭的流(stream)。在Tornado中,一个流代表一个请求或响应的数据流。这个警告可能意味着在请求处理的过程中,尝试向已经关闭的流发送了事件。可能的原因和解决方法:异步操作处理不当:在Tornado中,当你处理异步请求时,需......
  • 2023-2024-1 20232301 《网络》第5周学习总结
    教材学习内容总结教材学习中的问题和解决过程问题1:对于基于语义的海量媒体内容特征快速提取与分类技术,书上暂未举出具体例子,使我在理解上稍有欠缺问题1解决方案:通过不断询问chatgpt,我得到了以具体的体育文章为实例的回答,如下:“当涉及到基于语义的海量媒体内容提取与分类技术......
  • 2023-12
    2023-12*UcupStage11:NaningD.RedBlackTree(QOJ7736)好题。Description给你一颗树,每个节点有一个颜色(红或黑),定义一棵树是好的指这棵树中的所有节点到他子树中的叶子节点路径上的黑色节点数都相等。对每个\(1\lei\len\),求要使以\(i\)为子树是好的,至少要改变多少......
  • 2023年 11月助教总结报告
    一、助教工作的具体职责和任务我每周都会帮助老师批改作业,可以及时了解课程的进度和学生的学习情况。我负责整理学生的问题和反馈。此外,当学生遇到学习问题我可以解决时,我会积极帮助。同时,经过上一次总结,留意到很多同学说会忘记作业截止时间导致没有交上作业,我会提前在qq群里提醒......
  • 2023-2024-1 20231424《计算机基础与程序设计》第11周学习总结
    2023-2024-120231424《计算机基础与程序设计》第11周学习总结作业信息作业属于的课程<班级链接>(2022-2023-1-计算机基础与程序设计)作业要求<作业要求>(2022-2023-1计算机基础与程序设计第一周作业)作业目标《计算机科学概论》第15,16章和《C语言程序设计》第10章......