2016 MUTC 10

来源:互联网 发布:澳门网络网上博客 编辑:程序博客网 时间:2024/06/07 06:53

线段树场???

K题打个表模拟一下就行了

A题:给n个排好序的数组A,m个询问,每个询问给你(l1,r1,l2,r2)l1<=r1 ,l2<=r2.用A[l1], A[l1+1] … A[r1-1], A[r1] and A[l2], A[l2+1] … A[r2-1], A[r2] 组成一个新的数组,问它的中位数

假设l1<=l2
分类讨论,
看r1和l2是否相交,不相交的话,就是他们中间的那个数
如果相交的话,他们中间相交的数会出现两次
然后WA了好久,爆了int。。

B题是一个计算几何的题,首先要算出来。
感觉高中数学都还给老师了==

E - Road HDU - 5861 :一条线上有n个city,有n-1条路相连,每条路的开头都有一个门,只能开这个门一次,关上之后就不能再开了,每个门开的话单价per day。接下来m天中每天都会从ai,到bi城市走一遭。问你每天,最少花的钱

这个后面的路线会影响门是不是继续开,比如第1天经过了第2条路,然后第4天又经过了第二条路,那么在第1天和第4天中间,第二条路要一直开着。
所以我们记录一下每条路的使用开始时间与结束时间就行了。这个怎么记录呢,用线段树维护开始时间与结束时间。区间更新。最后向下推一次,开始时间和结束时间就都出来了,然后用一个ans数组记录,开始的地方+v,结束+1的地方-v,从前往后统计一下答案就行了

F - Counting Intersections HDU - 5862
题意:给你一些平行于坐标轴的线段,问他们有多少相交的点。坐标大小在1e9内

分析,这个和线段树的扫描线很像。我们先将竖线的开始点和结束点处理出来(下为开始,上为结束),然后将这些点按照高度从低到高排序,将横线也从低到高排序。我们在扫的时候,扫到当前横线,比它低的竖线的点都插入线段树中(线段树中是横坐标),然后区间查询就行了。
D - Death Sequence HDU - 5860
题意:有n个人,然后开始筛人,规则是先把第一个人筛了,然后筛掉第1+k,1+2k,1+3k,..一直到后面没有人了,这是一轮。每一轮都是这个规则。最后肯定是所有人都死了,问第几个人是第几个死掉的。

分析:可以用链表模拟吧(某次多校的灵感),还可以用线段树来模拟,就是筛掉的人更新为0,每次去找我想筛掉的人。比如现在要筛第3个人,然后去线段树中找v=3的位置,然后将他的v变为0。

原创粉丝点击