AcWing 908. 最大不相交区间数量】的更多相关文章

//1.将每个区间按右端点从小到大排序 //2.从前往后依次枚举每个区间,如果当前区间中已经包含点,就直接跳过,否则,选择当前区间的右端点 //选右端点的话,可以尽可能的包含在多个区间里 //那么选的点的数量,就是最大的不相交的区间的数量 #include <iostream> #include <algorithm> using namespace std; ; int n; struct Range { int l, r; bool operator< (const Ra…
352. 将数据流变为多个不相交区间 给定一个非负整数的数据流输入 a1,a2,-,an,-,将到目前为止看到的数字总结为不相交的区间列表. 例如,假设数据流中的整数为 1,3,7,2,6,-,每次的总结为: [1, 1] [1, 1], [3, 3] [1, 1], [3, 3], [7, 7] [1, 3], [7, 7] [1, 3], [6, 7] 进阶: 如果有很多合并,并且与数据流的大小相比,不相交区间的数量很小,该怎么办? 提示: 特别感谢 @yunhong 提供了本问题和其测试用…
是一道很经典的选择不相交区间的问题. 关于选择不相交区间,可以参考刘汝佳.也可以参考:http://blog.csdn.net/dgq8211/article/details/7534488 以及模板代码: #include <stdio.h> #include <algorithm> using namespace std; struct Extent { int a,b; bool operator < (const Extent& S)const { retur…
LeetCode352 将数据流变为多个不相交区间 1 题目 给你一个由非负整数 a1, a2, ..., an 组成的数据流输入,请你将到目前为止看到的数字总结为不相交的区间列表. 实现 SummaryRanges 类: SummaryRanges() 使用一个空数据流初始化对象. void addNum(int val) 向数据流中加入整数 val . int[][] getIntervals() 以不相交区间 [starti, endi] 的列表形式返回对数据流中整数的总结 2 思路 对于…
A. Vladik and flights time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Vladik is a competitive programmer. This year he is going to win the International Olympiad in Informatics. But it is…
//code by virtualtan 2018 寒7 区间不相交 #include <cstdio> #include <algorithm> #define MAXN 1111 using namespace std; struct node { int l, r; }a[MAXN]; int cmp(node x, node xx) { if(x.r != xx.r) return x.r < xx.r; //从小到大排序就用 ‘<’ return x.l &g…
题目背景 快noip了,yyy很紧张! 题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的. yyy认为,参加越多的比赛,noip就能考的越好(假的) 所以,他想知道他最多能参加几个比赛. 由于yyy是蒟蒻,如果要参加一个比赛必须善始善终,而且不能同时参加2个及以上的比赛. 输入输出格式 输入格式: 第一行是一个整数n ,接下来n行每行是2个正整数ai,bi(ai<bi),表示比赛开始.结束的时间. 输出格式: 一个整数最多参加的比赛数目. 输入输出样例 输入样例#1: 复…
一,介绍 ST算法是一个用倍增来求区间最值的算法,倍增是一个与二分类似的思想的一个东西,倍增简而言之也就是区间长度按1,2,4,8..... 我们先用nlog(n)的复杂度打出一个最大值表,后面我们可以通过O(1)的 复杂度来直接得出最大值 二,思路 我们用到F[i][j] 这个含义代表  [i,i+2^j-1]这一段区间的最大值,F[i][j]=max(F[i][j-1],F[i+(1<<(j-1))][j-1]),也就是我拆分成两个区间来求最大值 F[i][0]=a[i]; 我们求最大值,…
今年暑假不AC Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 81858    Accepted Submission(s): 43754 Problem Description “今年暑假不AC?”“是的.”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*%...” 确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也…
点击查看代码 #include<iostream> using namespace std; typedef long long ll; const int N = 1e5 + 10; int a[N], tmp[N]; ll merge_sort(int l, int r) { if (l >= r) return 0; int mid = l + r >> 1; ll res = merge_sort(l, mid) + merge_sort(mid + 1, r); i…
写在前面 05/10/19 今天心情很糟糕,没学新东西,复习没复习,作业没写完,下午要网课,明天要月考,脑子里就像是被一团棉花塞住了.静静的思考了半个小时,把自己手头上的事情排了个序,所以决定先把游记写个一半.刚刚把耳机捂热了,却不放任何的歌曲--我可以静一静了. 再见,那些知识点 暨·两年后填坑清单[不完整 加粗为截至05/10/19尚未掌握的知识点 基本上每个知识点都会附上代码或者是例题,或许还会有一些当时学习的心得? 基础算法 贪心 区间问题 1.区间选点//尝试选取最右边的点 2.最大不…
题目大意:给定一个 N 个值组成的序列,求序列中区间和相同的不相交区间段数量的最大值. 题解:设 \(dp[i][j]\) 表示到区间 [i,j] 时,与区间 [i,j] 的区间和相同的不相交区间数量是多少.可以枚举之前的区间进行状态转移,时间复杂度为 \(O(n^4)\). 代码如下 #include <bits/stdc++.h> using namespace std; const int maxn=51; int n,ans,x,y,a[maxn],sum[maxn],dp[maxn]…
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary). You may assume that the intervals were initially sorted according to their start times. Example 1:Given intervals [1,3],[6,9], insert and merge […
The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in the following figure. The floor has 200 rooms each on the north side and south side along the corridor. Recently the Company made a plan to reform its…
给定实直线L上的n个开区间,和一个正整数k 选取若干个区间,在保证实直线L上的任意一个点最多被选出区间覆盖k次的情况下,使得这些区间的长度和最大 先把区间按照左端点排序, 考虑到重复其实就代表着相交, 可以把问题转化为选出k组组内不相交区间,使得他们区间长度和最大. 从源点S向每个区间左端点连一条容量1费用0的边,每个区间右端点向汇点T连一条容量1费用0的边.用来限制每条边只能选一次. 每个区间左端点向右端点连一条容量1费用为区间长度的边 每个区间右端点向所有数值比它大的其他区间左端点连一条容量…
在RMQ的其他实现方法中,有一种叫做ST的算法比较常见. [构建] dp[i][j]表示的是从i起连续的2j个数xi,xi+1,xi+2,...xi+2j-1( 区间为[i,i+2j-1] )的最值. 状态转移方程dp[i][j]=max/min(dp[i][j-1], dp[i+2j-1][j-1]) [查询] 对于一个查询区间[x,y],只要找到一个或者多个2的整数倍长度的刚好区间覆盖[x,y] ,取这些区间最值的最值就是答案了. 如何把[x,y]覆盖完整? 一种办法是把区间的长度按照二进制…
题意:给定一个长为n的数列,要求选出最多k个不相交的区间(可以不选),使得选中的数字之和最大.(1<=k<=n<=1000000)分析:首先我们通过预处理对问题做一些简化.原序列中的0对答案没有影响,可以直接删掉.连续的一段正数或一段负数一定是都选或者都不选,可以合并成一个数字.这样把序列转化成了正数和负数交替出现的形式.如果序列的最左端/最右端是负数,这个负数在最优解当中一定不会被选中,我们可以把它删掉.这样就把序列变成了正负交替,以正数开头和结尾的形式.这时若直接考虑选出k个不相交区…
ZOJ Problem Set - 1610 Count the Colors Time Limit: 2 Seconds      Memory Limit: 65536 KB Painting some colored segments on a line, some previously painted segments may be covered by some the subsequent ones. Your task is counting the segments of dif…
喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿.请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿.   输入 第一行输入一个正整数N表示共有n次测试数据.每一组测试数据的第一行有三个整数n,w,h,n表示共有n个喷水装置,w表示草坪的横向长度,h表示草坪的纵向长度.随后…
http://acm.hust.edu.cn/vjudge/problem/14689 三个操作 [a,b]覆盖为0 [a,b]覆盖为1 [a,b]颠倒每项 两个查询 [a,b]间1数量 [a,b]间最长连续1数量 其实是区间覆盖,区间颠倒和区间合并的结合,可以先看这几道题 区间合并:http://www.cnblogs.com/qlky/p/5745065.html 区间更新(两种更新方式):http://www.cnblogs.com/qlky/p/5737676.html 可以分为两项做:…
题意 : 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分.试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. 分析 :  有大佬给出了四边形不等式优化........ 发现并不会,于是开始学习区间DP的写法 对于某一个特定的区间 (i, j) 其合并成一个石子是从 某两个属于这个区间且连续不相交区间合并而来 即假设有断点 k 则 (i, j) = (i, k) + (k+1, j)…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3091 题解 调了整个晚自习才调出来的问题. 乍一看是个 LCT 板子题. 再看一眼还是个 LCT 板子题,不过需要考虑两个区间的结果的合并. 首先考虑到期望可以转化为每一个区间的权值和.那么对于每一个区间,我们维护一个 \(s, ls, rs, sum\) 分别表示整个区间的和,所有前缀的和,所有后缀的和,整个区间的子区间权值和. 那么在区间合并的时候,\(rs\) 会被计算右区间大小次,\…
题目描述 给定一个长度为$n$的序列$a$以及常数$k$,序列从$1$开始编号.记$$f(l,t)=\sum \limits_{i=l}^ra_i-\max \limits_{i=l}^r\{a_i\}$$求合法的正整数对$(l,r)$的数量,满足$1\leqslant l<r\leqslant n$,且$k|f(l,r)$. 输入格式 第一行两个正整数$n$和$k$. 第二行包含$n$个正整数,第$i$个正整数表示$a_i$. 输出格式 一行一个正整数,表示答案. 样例 样例输入1: 4 3…
题目链接:https://www.luogu.com.cn/problem/P3834 对于区间查询第k小的问题,在区间数量达到5e5的时候是难以用朴素数据结构实现的,这时候主席树就应运而生了,主席树的最基础模板就是查询区间第k小树,其实他在可持久化操作上是十分上手的.主席树在线段树和离散化的基础上实现,树中每一个结点存的是当前结点代表的区间中数的数量,所以初始时刻每个结点的值都是零.然后要插入一个数a到达位置a,并且向上更新所有包含位置a的区间.主席树中每次要插入一个数就新建O(logn)量级…
力扣上也有一道类似的题 几乎是一样 输出不同 → 力扣leetcode 435. 无重叠区间 区间贪心是比较经典的 就拿洛谷P1803来举例 题目大意 n个比赛 [开始时间,结束时间] 问一个人最多能参加几个(不能同时参加两个且必须有始有终) 题解 首先考虑最简单的情况,如果区间L1被区间L2包含(图a),那么显然选择L1是最好的,也符合局部贪心思想. 然后把所有区间按左端点(此例子就是开始时间)从大到小排序,如果把重叠的区间去除了,必然得到的是y1>y2>...>yn(图b) 所以选择…
会场安排问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动.现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排.   输入 第一行是一个整型数m(m<100)表示共有m组测试数据.每组测试数据的第一行是一个整数n(1<n<10000)表示该测试数据共有n个活动.随后的n行…
题意:给出n个工作,已知每个工作需要的时间last,以及截止时间end,(必须在截止时间之前完成)问最多能够完成多少个工作 首先预处理,将这n件任务按照截止时间从小到大排序 然后用一个cur记录当前做任务花费的时间, 如果发现当前cur>a[i].end,那么就将队列里面目前最大的last删除,把这个a[i].last加入队列 可以这样想,把更小的放进去,那么可以为后面的任务腾出更多的时间 然后每删除一次队列里面的元素(即不做这个任务),ans++, 最后能够完成的任务就是n-ans #incl…
题解:发现可以通过枚举区间将区间和相同的元组记录在一个表中,对于答案来说,在同一个表中的元组的选择才会对答案产生贡献.发现每一个表中都是一个个区间,问题转化成了对于每一个表来说,选择若干个不相交的区间,使得选择出来的区间数量最多,直接贪心即可. 代码如下 #include <bits/stdc++.h> using namespace std; typedef pair<int,int> P; const int maxn=1501; int n,a[maxn],sum[maxn]…
题外话 为什么不更ZJOI day1的游记呢.... 因为考挂自闭了不想更.等day2考完再说咕咕咕 还是更个SHOI旅游记吧!反正不是自家省选,玩得真开心~~~ day0 SH好热好热啊,感觉到夏天了 day1 考场是一个奇怪的科技中心什么的,早上很早去本来以为要试机,后来发现考场都进不去. 进去了竟然说随便坐...我原来那个位置键盘贼难受,后来换了一个鼠标很诡异的位置,不过键盘还挺好用的. SH还是发了面包,比ZJ优秀(???)午饭感觉也还不错的说 暴力60+40+? T1是送的,T2是个后…
说实话我觉得做这种题很没意思(不够硬核), 可是人有短板终究是要补的...起码这种类型补起来相对简单 所以还是把先前准备好的专题放下吧,做点实现上比较休闲的题 ps.为了精简篇幅,代码全部丢到ubuntu上 Codeforces - 483C 题意:给定\(k\),构造\(n\)的某一排列\(p\)满足\(|p_i-p_{i+1}|\)共有\(k\)种不同的值 做法:当\(k\)为\(n-1\)时,分奇偶前后插可满足情况,\(k<n-1\)时从\(k\)处开始排序可消除差异 https://pa…