摆摊(stall)

tyvj的一道题,大意是这样的。。。

【问题描述】在 T 校的校门口有一条路,这条路上有一些摊位,按照离校门的远近关系标号为 1, 2, 3, . . . , N。

你突然发现在校门⼜卖煎饼(hualaishi)是一件很好的差事,于是你打算暑假在校门口(sushe)卖煎饼(hualaishi)。你发现这些摊位有一些是被占用的,有一些是没有被占用的。

你为了方便生意,需要占用两个连续的没有被占用的摊位来卖煎饼。

当然你希望你的煎饼摊离学校越近越好,所以你希望占用的两个连续摊位的的编号越小越好。现在给你一个长度为 M 的序列 a1, a2, ..., am,表示已经占用的摊位信息。

你需要回答 Q 个询问,每个询问有两个参数 L,R,表示问你当 aL, aL+1, ..., aR这些摊位被占用的时候你应该选择哪两个编号的摊位。

【输入格式】第一行三个整数,N,M,Q,分别表示摊位的编号范围,a 序列的长度,询问次数。

第二行M 个整数表示 a 序列。

之后 Q 行,每行两个整数 L,R。

【输出格式】输出一共 Q行,每行两个空格隔开的两个整数,表示你占用的连续两个摊位,如果没有找到合适摊位请输出-1 -1。

【样例输入】10 5 15

3 1 6 7 5

1 1

1 2

1 3

1 4

1 5

2 2

2 3

2 4

2 5

3 3

3 4

3 5

4 4

4 5

5 5

【样例输出】1 2

 4 5

 4 5

 4 5

 8 9

 2 3 

 2 3

 2 3

 2 3

 1 2

 1 2

 1 2

 1 2

 1 2

 1 2

这一题说实话还是挺没良心的,因为。。。

【数据规模和约定】对于 10% 数据,保证 Q = 1。

对于其他 20% 数据,N, M, Q ≤ 100。

对于其他 20% 数据,N, M, Q ≤ 1000。

对于其他 20% 数据,N, M, Q ≤ 10000。

对于其他 20% 数据,N, M, Q ≤ 100000 。

对于 100% 的数据,1 ≤ N, M, Q ≤ 200000, 1 ≤ ai ≤ N。

暴力截的话一道会TLE掉好几个点。。。

然而我暂时想不到比暴力更好的办法了(蒟蒻表示十分无奈= =)

其实莫队这种算法是可以卡过的(没卡莫队),然而我不会。。。。。。(GG)

附上一篇丑陋的代码~\(≧▽≦)/~啦啦啦(pascal)   

procedure fin;
begin
 assign(input,'stall.in');
 assign(output,'stall.out');
 reset(input); rewrite(output);
end;
procedure fout;
begin
close(input); close(output);
end;
var
  i,j,k,L,R,n,m,q:longint;
  sta:array[1..200000]of longint;
  len:array[0..200000]of longint;
begin
fin;
  readln(n,m,q);
  fillchar(sta,sizeof(sta),0);


  for i:=1 to m do begin
     read(k);sta[i]:=k;
  end;


  for k:=1 to q do begin
     readln(L,R);
     for i:=1 to n do len[i]:=1;
       for i:=L to R do
          len[sta[i]]:=-1;


       for i:=1 to n do begin
        if (len[i]=1)and(len[i-1]=1) then begin
        writeln(i-1,' ',i); break; end;
       if (i=n)and(len[i]<2)then writeln(-1,' ',-1);//暴力的主过程
       end;
  end;
fout;
end.

大佬们如果有更好的方法请@我O(∩_∩)O。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值