因为这题的线段长度是递增的....所以:
题解:对于新插入的线段,查询有多少个线段左端点大于等于该线段的左端点。 再查询有多少个线段的右端点大于该线段右端点, 两者之差就是答案。用两个树状数组搞定。时间复杂度nlog
Segment Game
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536...
分类:
编程语言 时间:
2015-08-12 23:44:15
阅读次数:
186
题目链接:hdu 5372 Segment Game
因为线段长度是递增的,不会出现后面的线段被前面的线段完全覆盖,所以只要分别计算[1,l-1]之间有多少个左端点,[1,r]之间有多少个右端点,想减即可。
#include
#include
#include
using namespace std;
const int maxn = 2 * 1e5 + 5;
#def...
分类:
编程语言 时间:
2015-08-12 23:38:53
阅读次数:
142
题意:
有两种操作:
1. 插入一个线段
2. 删除一个已存在的线段
每次插入后输出当前插入的线段能完整覆盖存在的几条线段。
解析:
线段树上面维护的是两个值,左端点的和,右端点的和
每次插入一条区间[L, R]就,
先询问 [0, R] 的右端点个数 lsum
再询问[L, INF]的左端点的个数 rsum
tot表示:当前线段还有几条...
分类:
其他好文 时间:
2015-08-12 19:21:34
阅读次数:
126
题目链接: Hdu 5372 Segment Game题目描述: 有一段区间,对这段区间有两种操作。1:插入操作,第i次插入长度为i的线段,并询问被当前线段完全覆盖的线段数目。 2:删除操作,删除第b次插入的线段。解题思路: 对于当前新插入线段,只需要统计已...
分类:
编程语言 时间:
2015-08-12 18:59:36
阅读次数:
168
题目链接:点击打开链接
题目大意:存在一个横轴,有n此操作,0代表在横轴上新增加一条边,1代表删除1条边,其中0 x代表在从x位置开始增加一条边,当第i次加边时,边的长度为i,1 x代表删除第x次加的边。问每当新加入一条边是,这条边能完整的包含几条边。
为什么当时没做这个题,,,已经泪奔,,,
问的是新加的那条边能覆盖多少条边,统计已加入的边的左端点大于或等于新边左端点的个数x,统计已加入的...
分类:
编程语言 时间:
2015-08-12 16:56:13
阅读次数:
108
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5372
题意:有两种操作,输入a b,①a==0,插入第i条线段[b,b+i],输出[b,b+i]内有多少条完全包含于[b,b+i]的线段②a==1,删除插入的第b条线段。
分析:由于插入的线段长度是递增的,那么就不存在包含[b,b+i]的线段。那么完全包含于[b,b+i]的线段的数目=右端点小于等于b...
分类:
编程语言 时间:
2015-08-12 14:46:05
阅读次数:
156
注意到一个很重要的性质:每次添加的线段必定比前面添加的线段长。
所以可以用 左端点>=当前线段左端点的线段数 - 右端点>当前线段右端点的线段数,就是答案。
Segment Game
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submissio...
分类:
其他好文 时间:
2015-08-12 13:25:13
阅读次数:
151
题意:两种操作,添加线段和删除线段,第i次添加时告诉线段起点并且要添加长度为i的线段,删除第i次添加的线段,问每次添加后有多少线段是落在当前要画的线段内部的。
思路:因为每次画的线段的长度是递增的,所以当前画的线段不可能被其他线段包含,那么统计小于左端点的点的个数x和小于等于右端点的点的个数y,ans=y-x。分别用树状数组维护,没写过树状数组了,都忘了,又复习了一下。...
分类:
编程语言 时间:
2015-08-12 11:36:48
阅读次数:
121
给出一些操作,0是将第i次增加的线段放在b位置,第i次放的线段的长度为i1是将第b次增加操作放的线段删除每次增加操作完之后,询问这条线段上面的完整的线段的条数每次询问统计比这条线段左端点大的线段的条数 L,比这条线段右端点大的线段的条数 R,两个相减就是完整的线段的条数另外因为给的b很大,所以需要离...
分类:
编程语言 时间:
2015-08-12 10:10:31
阅读次数:
149
我的内心是几乎崩溃的,感受到了英语渣的悲剧。。前几次WA没有发现是第i次增加操作。> =)的点的个数。right[i]表示右端点在i的右边的点的个数。(>)可以发现绿色的线段有个统一的特点:他们的左端点统计在left[x]中,右端点统计在right[y]中。蓝色的线段只有出现在left[x]中。这样...
分类:
其他好文 时间:
2015-08-12 01:05:43
阅读次数:
145