2017年衢州联赛 T2

2017年衢州联赛 T2


题目

这里写图片描述这里写图片描述这里写图片描述这里写图片描述

题解

单调栈或单调序列 + 二分查找优化


代码(Pascal)

var n,tot,ans:longint;
    a,q:array[0..50005]of longint;
 procedure init;
  var i,x:longint;
   begin
     assign(input,'skyline.in');reset(input);
     assign(output,'skyline.out');rewrite(output);
      readln(n);
      for i:=1 to n do
       readln(x,a[i]);
    end;
 function find(x:longint):longint;
  var l,r,mid:longint;
   begin
     l:=0;r:=tot;
     while l<=r do
      begin
        mid:=(r+l+1) div 2;
        if q[mid]<x then begin
                           find:=mid;
                           l:=mid+1;
                          end
                    else r:=mid-1;
       end;
    end;
 procedure main;
  var i,j,t:longint;
   begin
     tot:=0;ans:=0;
     for i:=1 to n do
      begin
        if a[i]=0 then begin
                         tot:=0;
                         continue;
                        end;
        t:=find(a[i]);
        if t=tot then begin
                        inc(ans);inc(tot);
                        q[tot]:=a[i];
                       end else
        if q[t+1]=a[i] then tot:=t+1
                       else begin
                              inc(ans);
                              tot:=t+1;
                              q[tot]:=a[i];
                             end;
       end;
   end;
 procedure print;
  begin
    write(ans);
   close(input);close(output);
  end;
 begin
   init;
   main;
   print;
  end.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值