找回密码
 立即注册
查看: 1230|回复: 23

单调队列= =

[复制链接]

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

发表于 2014-2-11 11:59:57 | 显示全部楼层 |阅读模式
var
a:array[1..2000000] of longint;
max,min:array[1..2000000,1..2] of longint;
answer1,answer2:array[1..2000000] of longint;
n,m,i,j,k,p,head1,tail1,head2,tail2:longint;
flag:boolean;
procedure insert1(x,time:longint);
var
l,r,mid:longint;
begin
        l:=head1;
        r:=tail1;
        if l=r then begin
        if x>=max[l,1] then begin
        tail1:=l; max[l,1]:=x; max[l,2]:=time; end
        else begin
        inc(tail1);
        max[tail1,1]:=x;
        max[tail1,2]:=time;
        end;
        end
        else begin
        while l+1<r do
        begin
        mid:=(l+r) div 2;
        if x>=max[mid,1] then r:=mid
        else l:=mid;
        end;
        if x>=max[l,1] then begin
        tail1:=l; max[l,1]:=x; max[l,2]:=time; end
        else if x>=max[r,1] then  begin
        tail1:=r; max[r,1]:=x; max[r,2]:=time;
        end
        else begin
        inc(tail1);
        max[tail1,1]:=x;
        max[tail1,2]:=time;
        end;
        end;
end;

procedure insert2(x,time:longint);
var
l,r,mid:longint;
begin
        l:=head2;
        r:=tail2;
        if l=r then begin
        if x<=min[l,1] then begin
        tail2:=l; min[l,1]:=x; min[l,2]:=time; end
        else begin
        inc(tail2);
        min[tail2,1]:=x;
        min[tail2,2]:=time;
        end;
        end
        else begin
        while l+1<r do
        begin
        mid:=(l+r) div 2;
        if x<=min[mid,1] then r:=mid
        else l:=mid;
        end;
        if x<=min[l,1] then begin
        tail2:=l; min[l,1]:=x; min[l,2]:=time; end
        else if x<=min[r,1] then begin
        tail2:=r; min[r,1]:=x; min[r,2]:=time;
        end
        else begin
        inc(tail2);
        min[tail2,1]:=x;
        min[tail2,2]:=time;
        end;
        end;
end;


begin
        fillchar(max,sizeof(max),0);
        fillchar(min,sizeof(min),0);
        readln(n,k);
        head1:=1;
        head2:=1;
        tail1:=1;
        tail2:=1;
        for i:=1 to n do
                read(a[i]);
        max[tail1,1]:=a[1];
        min[tail2,1]:=a[1];
        max[tail1,2]:=1;
        min[tail2,2]:=1;
        for i:=2 to k do
        begin
                insert1(a[i],i);
                insert2(a[i],i);
        end;
        answer1[1]:=max[1,1];
        answer2[1]:=min[1,1];
        for i:=k+1 to n do
        begin
                flag:=false;
                for j:=head1 to tail1 do
                        if (i-max[j,2])<k
                        then begin flag:=true; break; end;
                if flag=true then begin
                head1:=j;  insert1(a[i],i); end
                else begin head1:=j+1; tail1:=head1;
                max[tail1,1]:=a[i]; max[tail1,2]:=i; end;
                flag:=false;
                for j:=head2 to tail2 do
                        if (i-min[j,2])<k
                        then begin flag:=true; break; end;
                if flag=true then begin
                head2:=j; insert2(a[i],i); end
                else begin head2:=j+1; tail2:=head2;
                min[tail2,1]:=a[i]; min[tail2,2]:=i; end;



                answer1[i-k+1]:=max[head1,1];
                answer2[i-k+1]:=min[head2,1];
        end;
          write(answer2[1]);
        for i:=2 to n-k+1 do
                write(' ',answer2[i]);
        writeln;
        write(answer1[1]);
        for i:=2 to n-k+1 do
                write(' ',answer1[i]);
        writeln;

end.


回复

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2014-2-11 12:07:32 | 显示全部楼层
好吧。最裸的
回复 支持 反对

使用道具 举报

129

回帖

333

基友

743

积分

通神2段 Lv.5

Rank: 3Rank: 3

发表于 2014-2-11 12:20:41 | 显示全部楼层
这是什么呢
回复 支持 反对

使用道具 举报

1249

回帖

2568

基友

4113

积分

通神6段 Lv.9

Rank: 5Rank: 5

发表于 2014-2-11 12:57:49 | 显示全部楼层
教程铁在哪里?
回复 支持 反对

使用道具 举报

612

回帖

2380

基友

2239

积分

通神4段 Lv.7

苍海·一声笑

Rank: 4

伯爵荣耀

发表于 2014-2-11 13:45:12 | 显示全部楼层
围观、。、。
回复 支持 反对

使用道具 举报

159

回帖

755

基友

709

积分

通神2段 Lv.5

Rank: 3Rank: 3

伯爵荣耀

发表于 2014-2-11 14:29:34 | 显示全部楼层
什么
再次不明觉厉
回复 支持 反对

使用道具 举报

7657

回帖

86万

基友

34万

积分

天下一番

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

伯爵荣耀

发表于 2014-2-11 16:10:34 | 显示全部楼层
再次吐槽delphi的赋值和比较运算符看着别扭死了= =
回复 支持 反对

使用道具 举报

587

回帖

682

基友

5877

积分

死神左手

Rank: 16Rank: 16Rank: 16Rank: 16

发表于 2014-2-11 23:03:09 来自手机 | 显示全部楼层
pascal= =目前我是被学校老师逼着学这个,明年要竞赛
回复 支持 反对

使用道具 举报

543

回帖

9457

基友

6601

积分

萨菲尔斯

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

发表于 2014-2-12 16:13:43 来自手机 | 显示全部楼层
对pascal无感
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2014-2-12 20:03:43 | 显示全部楼层
Coolness 发表于 2014-2-11 23:03
pascal= =目前我是被学校老师逼着学这个,明年要竞赛

NOIP还是NOI
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2014-2-12 20:04:04 | 显示全部楼层
龙 发表于 2014-2-11 16:10
再次吐槽delphi的赋值和比较运算符看着别扭死了= =

回复 支持 反对

使用道具 举报

587

回帖

682

基友

5877

积分

死神左手

Rank: 16Rank: 16Rank: 16Rank: 16

发表于 2014-2-12 22:47:01 | 显示全部楼层
yuebaosanqing 发表于 2014-2-12 20:03
NOIP还是NOI

应该是NOI吧
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2014-2-13 09:02:26 | 显示全部楼层
Coolness 发表于 2014-2-12 22:47
应该是NOI吧

表示虽然也要去NOI。。但感觉毫无前途啊
回复 支持 反对

使用道具 举报

1万

回帖

6412

基友

3万

积分

死神左手

纯白无邪

Rank: 16Rank: 16Rank: 16Rank: 16

二货勋章周年纪念勋章

发表于 2014-2-13 09:18:16 | 显示全部楼层
Coolness 发表于 2014-2-11 23:03
pascal= =目前我是被学校老师逼着学这个,明年要竞赛

你还好了。我们这里根本没条件竞赛
回复 支持 反对

使用道具 举报

587

回帖

682

基友

5877

积分

死神左手

Rank: 16Rank: 16Rank: 16Rank: 16

发表于 2014-2-13 11:34:28 | 显示全部楼层
yuebaosanqing 发表于 2014-2-13 09:02
表示虽然也要去NOI。。但感觉毫无前途啊

= = 我们学校的高考状元听老师吹得之牛逼了,竞赛1等奖 = =
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2014-2-13 13:14:05 | 显示全部楼层
Coolness 发表于 2014-2-13 11:34
= = 我们学校的高考状元听老师吹得之牛逼了,竞赛1等奖 = =

金牌?
回复 支持 反对

使用道具 举报

2034

回帖

2万

基友

2万

积分

仙人7层 Lv.16

Invincible

Rank: 10Rank: 10Rank: 10

发表于 2014-2-13 21:50:58 来自手机 | 显示全部楼层
上邪 发表于 2014-2-13 09:18
你还好了。我们这里根本没条件竞赛

同→_→
回复 支持 反对

使用道具 举报

2034

回帖

2万

基友

2万

积分

仙人7层 Lv.16

Invincible

Rank: 10Rank: 10Rank: 10

发表于 2014-2-13 21:51:43 来自手机 | 显示全部楼层
上邪 发表于 2014-2-13 09:18
你还好了。我们这里根本没条件竞赛

我们只有主科的竞赛→_→
回复 支持 反对

使用道具 举报

2034

回帖

2万

基友

2万

积分

仙人7层 Lv.16

Invincible

Rank: 10Rank: 10Rank: 10

发表于 2014-2-13 21:53:10 来自手机 | 显示全部楼层
只见过优先队列→_→
回复 支持 反对

使用道具 举报

587

回帖

682

基友

5877

积分

死神左手

Rank: 16Rank: 16Rank: 16Rank: 16

发表于 2014-2-13 22:09:25 | 显示全部楼层
yuebaosanqing 发表于 2014-2-13 13:14
金牌?

貌似是这样
回复 支持 反对

使用道具 举报

2038

回帖

1967

基友

6万

积分

月报三清

纯新人

Rank: 16Rank: 16Rank: 16Rank: 16

会员纪念勋章伯爵荣耀

 楼主| 发表于 2014-2-14 08:46:34 | 显示全部楼层
Coolness 发表于 2014-2-13 22:09
貌似是这样

可怕
回复 支持 反对

使用道具 举报

1万

回帖

6412

基友

3万

积分

死神左手

纯白无邪

Rank: 16Rank: 16Rank: 16Rank: 16

二货勋章周年纪念勋章

发表于 2014-2-14 11:11:11 | 显示全部楼层
Liberty 发表于 2014-2-13 21:51
我们只有主科的竞赛→_→

→_→我们这里就语数英竞赛
回复 支持 反对

使用道具 举报

2034

回帖

2万

基友

2万

积分

仙人7层 Lv.16

Invincible

Rank: 10Rank: 10Rank: 10

发表于 2014-2-14 14:41:40 来自手机 | 显示全部楼层
上邪 发表于 2014-2-14 11:11
→_→我们这里就语数英竞赛

→_→差不多 我们还有化学
回复 支持 反对

使用道具 举报

311

回帖

296

基友

536

积分

通神1段 Lv.4

Rank: 2

伯爵荣耀

发表于 2014-2-22 21:07:38 | 显示全部楼层
恩啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|苍海国际 ( 鲁ICP备13020644号-1 )

GMT+8, 2024-6-1 13:26 , Processed in 0.080636 second(s), 29 queries .

Powered by Discuz! Theme By eRic Modified by 4bpa

© CangHai International We Do Our Rights!

返回顶部