题意:OI大师抖儿在夺得银牌之后,顺利保送pku。这一天,抖儿问长者:“我的手速虽然已经站在了人类的巅峰,但是打隔膜还是输。我换了很多队友,但是没有用。请问应该怎样打好隔膜?”
长者回答:“你啊,Too Young Too Simple,Sometimes Naive!不过你来看看这个游戏,或许对你有些帮助。”
这是一个类似星球大战的游戏。有n个星球排成一列,第i个星球和第i+1个星球存在一条耗时为1、可多次经过的航线。同时还存在m扇传送门,一扇由i到j的传送门可以瞬间将抖儿从第i个星球传送到第j个星球或从第j个星球传送到第i个星球,但是传送完毕后传送门会消失。此外,抖儿目前的资源可以额外建造不多于p扇传送门。
抖儿可以从任意一个星球出发,经过所有的航线和传送门至少一次,然后在任意一个星球结束。抖儿自然希望能在尽量短的时间内完成任务,请你帮忙计算答案。

对于所有的数据,保证n≤1e9,m≤100000,p≤100000

思路:LYY压轴题

pascal用堆实现带删除priority_queue

开两个堆,一个放被删除元素的堆,删除元素时将其复制放入

取堆顶时判断堆顶是否与删除堆的堆顶相同

因为此题元素有两个值,需要二次比较

写的神志模糊 转C保平安

 type arr=record
x:int64;
y,t:longint;
end; var q1,q2:array[..]of arr;
d,du,x,y:array[..]of longint;
pre,next:array[..]of longint;
a:array[..]of int64;
n,m,i,t,t1,t2,up,cnt1,cnt2,p,tmp,p1,p2,k:longint;
ans:int64; procedure swap(var x,y:int64);
var t:int64;
begin
t:=x; x:=y; y:=t;
end; procedure qsort(l,r:longint);
var i,j,t,mid:longint;
begin
i:=l; j:=r; mid:=d[(l+r)>>];
repeat
while mid>d[i] do inc(i);
while mid<d[j] do dec(j);
if i<=j then
begin
t:=d[i]; d[i]:=d[j]; d[j]:=t;
inc(i); dec(j);
end;
until i>j;
if l<j then qsort(l,j);
if i<r then qsort(i,r);
end; function hash(k:longint):longint;
var l,r,mid:longint;
begin
l:=; r:=up;
while l<=r do
begin
mid:=(l+r)>>;
if d[mid]=k then exit(mid);
if d[mid]<k then l:=mid+
else r:=mid-;
end;
end; procedure ins(x:int64;y:longint);
var t1,t2,t,tmp,k:longint;
begin
inc(cnt1);
q1[cnt1].x:=x; q1[cnt1].y:=y;
k:=cnt1;
while (k>)and((x<q1[k>>].x)or(x=q1[k>>].x)and(y<q1[k>>].y)) do
begin
t:=k>>;
t1:=q1[k].y; t2:=q1[t].y;
swap(q1[k].x,q1[t].x);
tmp:=q1[k].y; q1[k].y:=q1[t].y; q1[t].y:=tmp;
k:=k>>;
end;
end; procedure del(x:int64;y:longint);
var t1,t2,t,tmp,k:longint;
begin
inc(cnt2);
q2[cnt2].x:=x; q2[cnt2].y:=y;
k:=cnt2;
while (k>)and((x<q2[k>>].x)or(x=q2[k>>].x)and(y<q2[k>>].y)) do
begin
t:=k>>;
t1:=q2[k].y; t2:=q2[t].y;
swap(q2[k].x,q2[t].x);
tmp:=q2[k].y; q2[k].y:=q2[t].y; q2[t].y:=tmp;
k:=k>>;
end;
end; begin readln(n,m,p);
up:=; d[]:=; d[]:=n;
for i:= to m do
begin
read(x[i],y[i]);
inc(up); d[up]:=x[i];
inc(up); d[up]:=y[i];
end;
qsort(,up);
t:=up; up:=;
for i:= to t do
if d[i]<>d[up] then begin inc(up); d[up]:=d[i]; end;
du[]:=; du[up]:=;
for i:= to m do
begin
x[i]:=hash(x[i]);
y[i]:=hash(y[i]);
du[x[i]]:=du[x[i]] xor ;
du[y[i]]:=du[y[i]] xor ;
end; tmp:=; m:=;
for i:= to up do
if du[i]= then
begin
if tmp> then begin inc(m); a[m]:=d[i]-d[tmp]; end;
tmp:=i;
end; for i:= to m do
begin
//writeln(a[i]);
ins(a[i],i);
pre[i]:=i-;
next[i]:=i+;
end; t:=(m-) div -p;
//writeln(t);
for i:= to t do
begin
if cnt2> then
begin
t1:=; t2:=;
while (q1[t1].x=q2[t2].x)and(q1[t1].y=q2[t2].y) do
begin
q1[t1].x:=<<;
while t1<<<=cnt1 do
begin
k:=t1<<;
if (k+<=cnt1)and((q1[k+].x<q1[k].x)or
((q1[k+].x=q1[k].x)and(q1[k+].y<q1[k].y))) then inc(k);
if q1[k].x<q1[t1].x then
begin
swap(q1[k].x,q1[t1].x);
tmp:=q1[k].y; q1[k].y:=q1[t1].y; q1[t1].y:=tmp;
t1:=k;
end
else break;
end;
q2[t2].x:=<<;
while t2<<<=cnt2 do
begin
k:=t2<<;
if (k+<=cnt2)and((q2[k+].x<q2[k].x)or
((q2[k+].x=q2[k].x)and(q2[k+].y<q2[k].y))) then inc(k);
if q2[k].x<q2[t2].x then
begin
swap(q2[k].x,q2[t2].x);
tmp:=q2[k].y; q2[k].y:=q2[t2].y; q2[t2].y:=tmp;
t2:=k;
end
else break;
end;
t1:=; t2:=;
end;
end;
t2:=q1[].y; t1:=q1[].x;
del(t1,t2);
ans:=ans+t1;
if pre[t2]= then
begin
p1:=next[t2];
// writeln(p1);
del(a[p1],p1);
pre[next[next[t2]]]:=;
continue;
end
else if next[t2]>m then
begin
p1:=pre[t2];
// writeln(p1);
del(a[p1],p1);
next[pre[pre[t2]]]:=m+;
continue;
end;
tmp:=t2;
p1:=pre[tmp]; p2:=next[tmp];
// writeln(p1,' ',p2);
pre[tmp]:=pre[p1];
next[tmp]:=next[p2];
pre[next[tmp]]:=tmp;
next[pre[tmp]]:=tmp;
a[tmp]:=a[p1]+a[p2]-a[tmp];
ins(a[tmp],tmp);
del(a[p1],p1);
del(a[p2],p2);
end; writeln(ans+n-); end.
【后记】
抖儿深深沉迷于这个游戏不能自拔,日渐消瘦。
终于有一天,抖儿大彻大悟,说:“我知道了!玩游戏要的不仅仅是蛮力和手速,还需要智慧和策略。”
长者嘿嘿一笑:“你想多了。难道你还没发现你只适合玩单机游戏?”
抖儿恼羞成怒,便怂恿香港记者们造了一个大新闻,将长者批判了一番。

【NOIP2017练习】怎样打好隔膜(贪心,堆,带删除priority_queue)的更多相关文章

  1. 【贪心+堆】XMU 1584 小明的烦恼

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1584 题目大意: 给n(n<=100 000)个任务的耗时和截至时间,问最少不能 ...

  2. BZOJ_2151_种树_贪心+堆+链表

    BZOJ_2151_种树_贪心+堆 Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编 ...

  3. BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表

    BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐 ...

  4. BZOJ_1029_ [JSOI2007]建筑抢修_贪心+堆

    BZOJ_1029_ [JSOI2007]建筑抢修_贪心+堆 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是 ...

  5. 【bzoj4425】[Nwerc2015]Assigning Workstations分配工作站 贪心+堆

    题目描述 佩内洛普是新建立的超级计算机的管理员中的一员. 她的工作是分配工作站给到这里来运行他们的计算研究任务的研究人员. 佩内洛普非常懒惰,不喜欢为到达的研究者们解锁机器. 她可以从在她的办公桌远程 ...

  6. 【bzoj1029】[JSOI2007]建筑抢修 贪心+堆

    题目描述 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建 ...

  7. 【bzoj2802】[Poi2012]Warehouse Store 贪心+堆

    题目描述 有一家专卖一种商品的店,考虑连续的n天.第i天上午会进货Ai件商品,中午的时候会有顾客需要购买Bi件商品,可以选择满足顾客的要求,或是无视掉他.如果要满足顾客的需求,就必须要有足够的库存.问 ...

  8. BZOJ 1724: [Usaco2006 Nov]Fence Repair 切割木板 贪心 + 堆 + 反向思考

    Description Farmer John想修理牧场栅栏的某些小段.为此,他需要N(1<=N<=20,000)块特定长度的木板,第i块木板的长度为Li(1<=Li<=50, ...

  9. [JSOI2010]缓存交换 贪心 & 堆

    ~~~题面~~~ 题解: 首先我们要使得Miss的次数尽量少,也就是要尽量保证每个点在被访问的时候,这个点已经存在于Cache中. 那么我们可以得到一个结论: 如果Cache已满,那么我们就从Cach ...

随机推荐

  1. SpringCloud开发学习总结(四)—— 客户端负载均衡Ribbon

    通过上一章<SpringCloud开发学习总结(三)—— 服务治理Eureka>,我们已经搭建起微服务架构中的核心组件——服务注册中心(包括单点模式和高可用模式).同时还注册了一个服务,命 ...

  2. Android开发学习——开发调试工具-DDMS应用,ADB进程,Logcat,Eclipse Debug调试

    DDMS --  Dalvik debug monitor service    调试监控服务 对模拟器进行相关配置. ADB进程   Android debug bridge  建立eclipse和 ...

  3. AJPFX关于构造器的总结

    构造器        构造器定义        构造器作用        构造器特点        构造器修饰符        默认构造器        构造器重载        构造器和一般函数的区 ...

  4. Laravel Excel模板导出-带图片

    Laravel Excel版本 3.1 1.数据准备 建个2个表,加点数据,控制器中查数据,给模板使用. 表1-order:id, order_no, img_path, note 表2-order_ ...

  5. 为什么java String是固定的 为什么字符串是不可变的

    String类不可变的好处 String是所有语言中最常用的一个类.我们知道在Java中,String是不可变的.final的.Java在运行时也保存了一个字符串池(String pool),这使得S ...

  6. 08C#事件

    C#事件 1.2      事件 事件是C#语言内置的语法,可以定义和处理事件,为使用组件编程提供了良好的基础. 1.16.1       事件驱动 Windows操作系统把用户的动作都看作消息,C# ...

  7. vue 添加 fastclick的支持

    fastclick:处理移动端click事件300毫秒延迟 1.兼容性iOS 3及更高版本的移动SafariiOS 5及更高版本的ChromeAndroid上的Chrome(ICS)Opera Mob ...

  8. QT5:先导篇 算法

    一.简介 QT的<QtAlgorithms>和<QtGlobal>模块提供了几种常用算法 二.QtAlgorithms 三.QtGlobal

  9. Java中a=a++ 和 a=++a(转)

    转自https://blog.csdn.net/lovepluto/article/details/81062176 如果问 a++ 和 ++a 的区别,估计很多都能回答上来.a++ 是先取 a 的值 ...

  10. 洛谷——P2055 [ZJOI2009]假期的宿舍

    P2055 [ZJOI2009]假期的宿舍 学校放假了 · · · · · · 有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如 A 和 B 都是学校的学生,A 要回家,而 ...