[BZOJ1593] [Usaco2008 Feb]Hotel 旅馆

原创 2015年11月21日 17:37:29

传送门

http://www.lydsy.com/JudgeOnline/problem.php?id=1593

题目大意

两种操作
1.询问连续长度为x的最左端点,并将这段覆盖
2.将区间[L,R]区间取消覆盖

题解

记录区间
1.左端点连续没覆盖的长度
2.右端点连续没覆盖的长度
3.区间最长连续没覆盖的长度
修改之后回溯的时候合并注意讨论即可
详细见code

const
 maxn=50005;
var
 w:array[0..8*maxn,1..7]of longint;
 i,j,k:longint;
 n,m,a,b,c,ans:longint;
procedure build(a,l,r:longint);
var mid:longint;
begin
 w[a,1]:=l; w[a,2]:=r; w[a,3]:=r-l+1; w[a,4]:=r-l+1; w[a,5]:=r-l+1; w[a,6]:=-1;
 if l=r then exit;
 mid:=(l+r)>>1;
 build(a<<1,l,mid); build(a<<1+1,mid+1,r);
end;

procedure pushdown(a:longint);
begin
 if (w[a,6]=0)and(w[a,1]<>w[a,2]) then begin
  w[a<<1,3]:=w[a<<1,2]-w[a<<1,1]+1; w[a<<1,4]:=w[a<<1,3]; w[a<<1,5]:=w[a<<1,3];
  w[a<<1+1,3]:=w[a<<1+1,2]-w[a<<1+1,1]+1; w[a<<1+1,4]:=w[a<<1+1,3]; w[a<<1+1,5]:=w[a<<1+1,3];
  w[a<<1,6]:=w[a,6]; w[a<<1+1,6]:=w[a,6];
 end;
 if (w[a,6]=1)and(w[a,1]<>w[a,2]) then begin
  w[a<<1,3]:=0; w[a<<1,4]:=0; w[a<<1,5]:=0;
  w[a<<1+1,3]:=0; w[a<<1+1,4]:=0; w[a<<1+1,5]:=0;
  w[a<<1,6]:=w[a,6]; w[a<<1+1,6]:=w[a,6];
 end;
 w[a,6]:=-1;
end;

function query(a,b:longint):longint;
var mid:longint;
begin
 if w[a,6]<>-1 then pushdown(a);
 if w[a,1]=w[a,2] then exit(1);
 mid:=(w[a,1]+w[a,2])>>1;
 if w[a<<1,5]>=b then exit(query(a<<1,b)) else
 if w[a<<1,4]+w[a<<1+1,3]>=b then exit(mid-w[a<<1,4]+1)
 else exit(query(a<<1+1,b));
end;

procedure update(a,l,r,c:longint);
var mid,d:longint;
begin
 if w[a,6]<>-1 then pushdown(a);
 if (w[a,1]=l)and(w[a,2]=r) then begin
  w[a,6]:=c;
  if c=1 then d:=0 else d:=w[a,2]-w[a,1]+1;
  w[a,3]:=d; w[a,4]:=d; w[a,5]:=d;
  exit;
 end;
 mid:=(w[a,1]+w[a,2])>>1;
 if r<=mid then update(a<<1,l,r,c) else
 if l>mid then update(a<<1+1,l,r,c)
 else begin
  update(a<<1,l,mid,c);
  update(a<<1+1,mid+1,r,c);
 end;
 w[a,3]:=w[a<<1,3]; w[a,4]:=w[a<<1+1,4];
 if w[a<<1,4]=w[a<<1,2]-w[a<<1,1]+1 then inc(w[a,3],w[a<<1+1,3]);
 if w[a<<1+1,3]=w[a<<1+1,2]-w[a<<1+1,1]+1 then inc(w[a,4],w[a<<1,4]);
 w[a,5]:=w[a<<1,5]; if w[a<<1+1,5]>w[a,5] then w[a,5]:=w[a<<1+1,5];
 if w[a<<1,4]+w[a<<1+1,3]>w[a,5] then w[a,5]:=w[a<<1,4]+w[a<<1+1,3];
end;

begin
 readln(n,m);
 build(1,1,n);
 for i:=1 to m do
  begin
   read(a);
   if a=1
   then begin
    readln(b);
    if w[1,5]<b then begin writeln(0); continue; end;
    ans:=query(1,b); writeln(ans);
    update(1,ans,ans+b-1,1);
   end
   else begin
    readln(b,c);
    update(1,b,b+c-1,0);
   end;
  end;
end.
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

bzoj 3212: Pku3468 A Simple Problem with Integers

3212: Pku3468 A Simple Problem with Integers Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 1954 ...

bzoj1593[Usaco2008 Feb]Hotel旅馆

线段树

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

经验总结?

几位大佬的? orzGEOTCBRL WerKeyTom_FTD

网易游戏2011.10.15校园招聘会笔试题

1、对于一个内存地址是32位、内存页是8KB的系统。0X0005F123这个地址的页号与页内偏移分别是多少。 页面大小是8KB,那么页内偏移量是从0x0000(0)~ 0x1FFF(2的13次方 -...

BZOJ 1593 : [Usaco2008 Feb]Hotel 旅馆

1593: [Usaco2008 Feb]Hotel 旅馆Time Limit: 10 Sec Memory Limit: 64 MB Submit: 750 Solved: 414 [Sub...

bzoj 1593: [Usaco2008 Feb]Hotel 旅馆 线段树

题意奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光。作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿。这个巨大的旅馆一共有N (1 <= N <= 50,0...

pku 3017 单调队列优化DP

首先是方程。很容易看出来。dp[i] = min(dp[j]+maxsum[j+1][i])。然后这个n^2的方程就必须要优化。其实看。对于第i个数来说,它所在段的左边界是单调不减的。那么这个就比较类...
  • muye67
  • muye67
  • 2010-11-10 09:16
  • 1388

【bzoj1593】【poj3667】[Usaco2008 Feb]Hotel 旅馆

区间合并

BZOJ1593: [Usaco2008 Feb]Hotel 旅馆 线段树

1593: [Usaco2008 Feb]Hotel 旅馆 Time Limit: 10 Sec  Memory Limit: 64 MB Description 奶牛们最近的旅游计划,是到苏...

BZOJ1593 [Usaco2008 Feb]Hotel 旅馆 线段树

Description 奶 牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光。作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿。这个 巨大的旅馆一共有N (1...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)