青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

oyjpArt ACM/ICPC算法程序設計空間

// I am new in programming, welcome to my blog
I am oyjpart(alpc12, 四城)
posts - 224, comments - 694, trackbacks - 0, articles - 6

pku3667 hotel

Posted on 2008-07-27 19:49 oyjpart 閱讀(2941) 評論(1)  編輯 收藏 引用 所屬分類: ACM/ICPC或其他比賽

Hotel

Time Limit: 3000MS

 

Memory Limit: 65536K

Total Submissions: 478

 

Accepted: 129

Description

The cows are journeying north to in to gain cultural enrichment and enjoy a vacation on the sunny shores of Lake Superior. Bessie, ever the competent travel agent, has named the Bullmoose Hotel on famed Cumberland Street as their vacation residence. This immense hotel has N (1 ≤ N ≤ 50,000) rooms all located on the same side of an extremely long hallway (all the better to see the lake, of course).

The cows and other visitors arrive in groups of size Di (1 ≤ Di ≤ N) and approach the front desk to check in. Each group i requests a set of Di contiguous rooms from Canmuu, the moose staffing the counter. He assigns them some set of consecutive room numbers r..r+Di-1 if they are available or, if no contiguous set of rooms is available, politely suggests alternate lodging. Canmuu always chooses the value of r to be the smallest possible.

Visitors also depart the hotel from groups of contiguous rooms. Checkout i has the parameters Xi and Di which specify the vacating of rooms Xi ..Xi +Di-1 (1 ≤ XiN-Di+1). Some (or all) of those rooms might be empty before the checkout.

Your job is to assist Canmuu by processing M (1 ≤ M < 50,000) checkin/checkout requests. The hotel is initially unoccupied.

Input

* Line 1: Two space-separated integers: N and M
* Lines 2..M+1: Line i+1 contains request expressed as one of two possible formats: (a) Two space separated integers representing a check-in request: 1 and Di (b) Three space-separated integers representing a check-out: 2, Xi, and Di

Output

* Lines 1.....: For each check-in request, output a single line with a single integer r, the first room in the contiguous sequence of rooms to be occupied. If the request cannot be satisfied, output 0.

Sample Input

10 6

1 3

1 3

1 3

1 3

2 5 5

1 6

Sample Output

1

4

7

0

5

Source

USACO 2008 February Gold

 

 

這是一個線段樹的題目:

 

1.     題意建模:

關鍵點:找出最靠左的一個長度至少為K的線段可以用線段樹來做。

對任意一個線段樹中的節點(x,y) 維護3個信息:

1.     (x, y) 中最長的線段的長度

2.     x點開始向右的線段長度

3.     y點開始向左的線段長度

題目要求我們對一個(0, 50000)長的區間做以下操作:

A.   對任意區間 (x, y) 使 F(x, y) = 0

B.   對任意區間 (x, y) 使 F(x, y) = 1

C.   查詢任意一個區間 (x, y) 中最長的線段的長度,

D.   維護每個節點的3種信息

 

2.難點解析:

      1.實現A, B 操作:

要把某個節點覆蓋為0,或者1,不需要向下擴展。只有在需要查詢到兒子區間的狀態的時候才需要擴展(參考spread函數)

2.實現D的維護:

每次改變了左右兒子區間的信息的時候,就需要更新當前節點的信息(參考update函數)

 

3.代碼實現:

 

#include <stdio.h>

 

#define Max(a, b) ((a)>(b)?(a):(b))

 

const int N = 50010;

 

struct ST {int i,j,m,l,r,c,lc,rc;} st[2*N]; //区间宽度的2�

int up, n;

 

void bd(int d, int x, int y) {

      st[d].i = x, st[d].j = y, st[d].m = (x+y)/2;

      st[d].c = st[d].lc = st[d].rc = y-x;

      if(x < y-1) {

           st[d].l = ++up; bd(up, x, st[d].m);

           st[d].r = ++up; bd(up, st[d].m, y);

      }

}

 

void spread(int d) {

      if(st[d].c == st[d].j-st[d].i) {

           int& l = st[d].l, &r = st[d].r;

           st[l].c = st[l].lc = st[l].rc = st[l].j-st[l].i;

           st[r].c = st[r].lc = st[r].rc = st[r].j-st[r].i;

      } else if(st[d].c == 0) {

           int& l = st[d].l, &r = st[d].r;

           st[l].c = st[l].lc = st[l].rc = 0;

           st[r].c = st[r].lc = st[r].rc = 0;

      }

}

 

void update(int d) {

      st[d].c = Max(Max(st[st[d].l].c, st[st[d].r].c), st[st[d].l].rc + st[st[d].r].lc);

      if(st[st[d].l].c == st[st[d].l].j-st[st[d].l].i) {

           st[d].lc = st[st[d].l].c + st[st[d].r].lc;

      } else st[d].lc = st[st[d].l].lc;

      if(st[st[d].r].rc == st[st[d].r].j-st[st[d].r].i) {

           st[d].rc = st[st[d].r].rc + st[st[d].l].rc;

      } else st[d].rc = st[st[d].r].rc;

}

 

void Empty(int d, int x, int y) {

      if(x <= st[d].i && y >= st[d].j) {

           st[d].c = st[d].lc = st[d].rc = 0;

           return;

      }

 

      spread(d);

 

      if(x < st[d].m) Empty(st[d].l, x, y);

      if(y > st[d].m) Empty(st[d].r, x, y);

 

      update(d);

}

 

void Fill(int d, int x, int y) {

      if(x <= st[d].i && y >= st[d].j) {

           st[d].c = st[d].lc = st[d].rc = st[d].j-st[d].i;

           return;

      }

 

      spread(d);

 

      if(x < st[d].m) Fill(st[d].l, x, y);

      if(y > st[d].m) Fill(st[d].r, x, y);

 

      update(d);

}

 

int Get(int d, int l) {

     

      spread(d);

 

      if(st[d].c < l) return -1;

      if(st[st[d].l].c >= l)

           return Get(st[d].l, l);

      else if(st[st[d].l].rc + st[st[d].r].lc >= l) {

           return st[st[d].l].j-st[st[d].l].rc;

      }

      return Get(st[d].r, l);

}

 

int main()

{

      int i, nq, cmd, x, l, y;

      up = 0;

      scanf("%d%d", &n, &nq);

      bd(0, 0, n);

      while(nq--) {

           scanf("%d", &cmd);

           if(cmd == 1) {

                 scanf("%d", &l);

                 x = Get(0, l);

                 if(x != -1)

                      Empty(0, x, x+l);

                 printf("%d\n", x+1);

           } else {

                 scanf("%d%d", &x, &l);

                 Fill(0, x-1, x+l-1);

           }

      }

      return 0;

}



Feedback

# re: pku3667 hotel  回復  更多評論   

2008-09-26 10:59 by AngelClover
還是大牛的思路比較清晰~
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费不卡在线观看av| 国产亚洲va综合人人澡精品| 日韩视频在线永久播放| 国产日韩欧美日韩| 国产精品一区二区在线观看| 国产欧美欧洲在线观看| 国产午夜精品一区二区三区欧美| 国产日韩精品视频一区二区三区| 国产亚洲精品高潮| 亚洲国产精品久久91精品| 亚洲精品视频一区| 亚洲视频精品在线| 久久激情五月丁香伊人| 免费成人高清视频| 99re热这里只有精品免费视频| 中日韩美女免费视频网址在线观看 | 99精品热视频| 亚洲专区免费| 麻豆成人小视频| 国产精品国产三级国产专区53| 国产麻豆综合| 99v久久综合狠狠综合久久| 亚洲曰本av电影| 老鸭窝毛片一区二区三区| 日韩视频精品在线| 欧美一区影院| 欧美三级午夜理伦三级中文幕| 狠狠色狠狠色综合人人| 亚洲午夜视频在线观看| 美女国内精品自产拍在线播放| 亚洲桃色在线一区| 美女日韩欧美| 国产亚洲欧美日韩美女| 中文国产一区| 亚洲国产精选| 欧美一区二区三区成人| 欧美日韩一视频区二区| 在线观看日韩av先锋影音电影院| 亚洲一区国产视频| 亚洲高清视频在线观看| 欧美一区二区在线播放| 国产精品va在线播放我和闺蜜| 亚洲人屁股眼子交8| 久久亚洲精品网站| 亚洲欧美日韩中文播放| 国产精品家庭影院| 一区二区三区精品视频在线观看| 欧美不卡一区| 久久综合狠狠| 亚洲第一精品久久忘忧草社区| 先锋资源久久| 亚洲一区二区毛片| 欧美日韩在线精品一区二区三区| 亚洲激情偷拍| 亚洲国产精品一区在线观看不卡| 久久噜噜亚洲综合| 精东粉嫩av免费一区二区三区| 国产精品欧美久久久久无广告| 日韩视频精品| 亚洲国产欧美一区二区三区同亚洲| 久久国产精品99国产| 国产一区二区成人| 久久免费高清| 久久影视精品| 亚洲激情网站免费观看| 亚洲黄色成人久久久| 欧美人成在线| 亚洲女同精品视频| 亚洲午夜精品网| 国产精品老女人精品视频| 亚洲综合国产激情另类一区| 亚洲视频福利| 国产一区二区中文| 免费不卡视频| 欧美精品一区二区三区久久久竹菊 | 伊人久久综合| 欧美岛国在线观看| 欧美福利视频| 这里只有精品视频在线| 9国产精品视频| 国产欧美日韩三区| 美女诱惑一区| 欧美日韩极品在线观看一区| 亚洲综合成人在线| 久久国产精品网站| 亚洲国产高清视频| 日韩视频免费观看高清在线视频| 国产精品久久久久国产精品日日| 久久精品视频在线免费观看| 美日韩精品免费| 亚洲天堂偷拍| 久久久久看片| 一区二区三区四区五区精品视频| 一区二区免费在线视频| 国产日韩精品电影| 亚洲国产精品999| 国产美女精品视频免费观看| 欧美大片va欧美在线播放| 欧美精品成人在线| 久久精品国产久精国产爱| 欧美高清视频| 久久青青草原一区二区| 欧美日韩ab片| 欧美成人免费一级人片100| 欧美午夜美女看片| 欧美成人免费在线观看| 国产日产亚洲精品系列| 亚洲精品视频在线观看免费| 国产亚洲成精品久久| 亚洲精品久久久久| 国产一区二区三区自拍| 夜夜嗨av一区二区三区中文字幕| 尤物yw午夜国产精品视频明星| 一本色道久久综合| 亚洲国产欧美一区二区三区同亚洲 | 亚洲欧美日韩精品一区二区 | 香蕉久久夜色精品国产使用方法| 亚洲精品久久久久久久久久久久| 午夜欧美理论片| 中文国产成人精品久久一| 老司机一区二区三区| 欧美亚洲在线观看| 欧美午夜不卡影院在线观看完整版免费| 麻豆久久婷婷| 国产一区二区中文字幕免费看| 一本色道久久99精品综合 | 亚洲精品国产精品乱码不99| 好男人免费精品视频| 欧美一区二区精品在线| 欧美一区高清| 国产精品久久久久久久app| aⅴ色国产欧美| 99视频精品| 欧美色大人视频| 99国产精品99久久久久久| 亚洲最黄网站| 欧美日韩国产黄| 91久久国产自产拍夜夜嗨| 日韩午夜在线视频| 欧美精品国产精品日韩精品| 亚洲国产成人av| 亚洲国产精品一区二区三区| 乱中年女人伦av一区二区| 欧美激情国产日韩| 亚洲片在线资源| 免费在线观看成人av| 亚洲国产美女久久久久| 亚洲伦理在线免费看| 欧美精品国产一区| 一区二区三区高清在线| 久久高清免费观看| 国产原创一区二区| 久久久一区二区三区| 欧美成人a视频| 一区二区电影免费在线观看| 国产精品国产亚洲精品看不卡15| 亚洲欧美美女| 久久婷婷麻豆| 日韩小视频在线观看专区| 欧美日韩免费一区二区三区视频| 一本一本久久a久久精品综合妖精| 午夜精品久久久99热福利| 国户精品久久久久久久久久久不卡| 久久久久久久波多野高潮日日| 亚洲第一中文字幕| 亚洲在线成人| 伊人成人在线| 欧美日韩免费在线| 欧美一区二粉嫩精品国产一线天| 男男成人高潮片免费网站| 中文久久精品| 一区二区在线免费观看| 欧美精品九九| 欧美一二区视频| 最新日韩在线| 久久久精品免费视频| 亚洲乱码国产乱码精品精可以看| 99在线精品免费视频九九视| 欧美在线亚洲在线| 亚洲精品一区二| 国产亚洲成人一区| 欧美另类高清视频在线| 小处雏高清一区二区三区| 亚洲精品社区| 久久综合九色综合久99| 一本久道久久综合狠狠爱| 国产亚洲午夜| 国产精品白丝av嫩草影院| 久久综合狠狠综合久久综青草 | 午夜精品福利视频| 亚洲激情中文1区| 久久久精品国产一区二区三区| 夜夜夜精品看看| 国产一区二区三区久久久| 欧美日韩亚洲一区二区三区四区| 久久综合色一综合色88| 欧美中文字幕在线观看| 亚洲欧美另类国产| 日韩一区二区精品| 亚洲日韩欧美视频|