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

ACM___________________________

______________白白の屋
posts - 182, comments - 102, trackbacks - 0, articles - 0
<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用鏈接

留言簿(24)

隨筆分類(332)

隨筆檔案(182)

FRIENDS

搜索

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜

MiYu原創, 轉帖請注明 : 轉載自 ______________白白の屋    

 

題目地址 :

http://poj.org/problem?id=3667

題目描述:

Hotel
Time Limit: 3000MSMemory Limit: 65536K
Total Submissions: 2993Accepted: 1143

Description

The cows are journeying north to Thunder Bay in Canada 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 ≤ Xi ≤ N-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 D(b) Three space-separated integers representing a check-out: 2, Xi, andDi

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

 題目分析:

  題目打大意就是 找一段最左邊的滿足要求的線段.

右下面幾種操作 :

1: 插入線段

2: 刪除線段

上面2種操作可以同一個函數實現, 只需要傳一個標志量就行

3: 查詢可用區間

題目的數據意思 : 1 3   表示 要申請最左邊的滿足要求的線段, 輸出線段的左端點, 同時更新線段樹,   沒有滿足要求的線段時輸出0 , 這時不要更新線段 !!! 這里WA幾次 杯具

       2 5 5 表示 刪除以5為左端點, 長為5 的線段  , 就是 刪除[5,9].    

具體請看 代碼注釋 :

 

代碼
/*
Mail to   : miyubai@gamil.com
Link      : 
http://www.cnblogs.com/MiYu  || http://m.shnenglu.com/MiYu
Author By : MiYu
Test      : 1
Complier  : g++ mingw32-3.4.2
Program   : PKU_3667
Doc Name  : HOTEL
*/
//#pragma warning( disable:4789 )
#include <iostream>
#include 
<fstream>
#include 
<sstream>
#include 
<algorithm>
#include 
<string>
#include 
<set>
#include 
<map>
#include 
<utility>
#include 
<queue>
#include 
<stack>
#include 
<list>
#include 
<vector>
#include 
<cstdio>
#include 
<cstdlib>
#include 
<cstring>
#include 
<cmath>
#include 
<ctime>
using namespace std;
inline 
int max ( int a, int b ) {
       
return a > b ? a : b;       
}
struct segTree {
       
int left, right, lVal, rVal, mVal, cov;// cov -- >  0: 線段為空   1: 線段為滿  -1:2種情況都有 
       int mid () { return (left+right)>>1; }
       
int dis () { return right - left + 1; }
       
void set ( int flag ) { // 0: 線段為空   1: 線段為滿 
            if ( flag ){
                 cov 
= 1;
                 lVal 
= rVal = mVal = 0;  
            } 
else {
                 cov 
= 0;
                 lVal 
= rVal = mVal = right - left + 1;     
            }
       }     
}seg[
160000];
void creat ( int left, int right, int rt = 1 ) {   // 初始化線段 
     seg[rt].left = left;
     seg[rt].right 
= right;
     seg[rt].
set (0);
     
if ( left == right ) return;
     
int LL = rt << 1, RR = rt << 1 | 1, mid = seg[rt].mid();  
     creat ( left, mid, LL );
     creat ( mid 
+ 1, right, RR );  
}
void modify ( int left, int right, int flag, int rt = 1 ) {
     
if ( seg[rt].left >= left && seg[rt].right <= right ) {   //如果線段被覆蓋,  直接按flag標記處理,返回 
         seg[rt].set ( flag );   return;
     }     
     
int LL = rt << 1, RR = rt << 1 | 1, mid = seg[rt].mid();
     
if ( seg[rt].cov != -1 ) {     // 如果線段不是混合情況(即線段是被覆蓋的), 把標志下傳 
          seg[LL].cov = seg[RR].cov = seg[rt].cov;
          seg[LL].
set ( seg[LL].cov );   
          seg[RR].
set ( seg[RR].cov );
     } 
     
if ( right <= mid ) modify ( left, right, flag, LL );    //遞歸更新線段 
     else if ( left > mid ) modify ( left, right, flag, RR );
     
else {
           modify ( left, mid, flag, LL );
           modify ( mid 
+ 1, right, flag, RR );     
     }
     
if ( seg[LL].cov == 0 && seg[RR].cov == 0 ) seg[rt].cov = 0//線段為空 
     else if ( seg[LL].cov == 1 && seg[RR].cov == 1 ) seg[rt].cov = 1//線段滿 
     else seg[rt].cov = -1;  // 2種情況都有 
     seg[rt].mVal = max(seg[LL].rVal+seg[RR].lVal,max(seg[LL].mVal, seg[RR].mVal)); // 線段的更新,  經典部分
     seg[rt].lVal 
= seg[LL].lVal + ( seg[LL].cov == 0 ? seg[RR].lVal : 0 );
     seg[rt].rVal 
= seg[RR].rVal + ( seg[RR].cov == 0 ? seg[LL].rVal : 0 );
}
int query ( int val, int rt = 1 ) {
    
int LL = rt << 1, RR = rt << 1 | 1, mid = seg[rt].mid();
    
if ( seg[rt].cov == 0 && seg[rt].mVal >= val ) {   //線段為空,且可用,直接返回線段左端點 
             return seg[rt].left;
    } 
else if ( seg[rt].cov == -1 ) {   //分三種 情況處理  左   左右    右  處理   
         if ( seg[LL].mVal >= val ) return query ( val, LL );
         
else if ( seg[LL].rVal + seg[RR].lVal >= val ) return mid - seg[LL].rVal + 1;
         
else if ( seg[RR].mVal >= val )return query ( val, RR );  
    }   
    
return 0;
}
int main ()
{
    
int N, M, left, right, val, choice;
    
while ( scanf ( "%d%d"&N,&M ) == 2 ) {
           creat ( 
1, N );
           
while ( M -- ) {
                  scanf ( 
"%d"&choice );
                  
switch ( choice ) {
                          
case 1 : scanf ( "%d",&val );
                                   printf ( 
"%d\n", left = query ( val ) );
                                   
if ( left != 0 ) {
                                        right 
= left + val - 1;
                                        modify ( left, right, 
1 );
                                   }
                                   
break;
                          
case 2 : scanf ( "%d%d",&left, &val );
                                   right 
= left + val - 1;
                                   modify ( left, right, 
0 );
                                   
break;       
                  }       
           }      
    }
    
return 0;
}

 

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美国产视频日韩| 亚洲人成网站999久久久综合| 亚洲精品免费一区二区三区| 性欧美超级视频| 久久99在线观看| 国内成人精品一区| 久久躁日日躁aaaaxxxx| 久久噜噜亚洲综合| 亚洲国产国产亚洲一二三| 欧美久久电影| 中文在线不卡| 亚洲第一搞黄网站| 久久一区二区三区四区五区| 亚洲国产成人tv| 亚洲国产第一页| aa级大片欧美三级| 久久大逼视频| 久久精品国产第一区二区三区| 一区二区免费在线观看| 国产精自产拍久久久久久蜜| 久久久免费精品| 一区二区动漫| 亚洲国产日韩在线| 久久免费观看视频| 亚洲高清免费视频| 亚洲素人在线| 亚洲精品韩国| 欧美成人免费在线观看| 性欧美大战久久久久久久久| 亚洲精华国产欧美| 国产中文一区二区三区| 亚洲精品美女在线观看| 亚洲欧美一区二区原创| 日韩午夜在线| 国产一区二区三区久久悠悠色av| 欧美日韩国产经典色站一区二区三区| 欧美成人第一页| 一本色道精品久久一区二区三区| 免播放器亚洲| 亚洲尤物在线| 国产专区欧美精品| 久久亚洲一区| 亚洲欧美国产不卡| 欧美日韩一卡| 亚洲电影av| 久久久www| 亚洲视频在线观看免费| 国产午夜精品全部视频在线播放 | 亚洲综合导航| 欧美在线free| 国产精品久在线观看| 在线激情影院一区| 亚洲精品欧美日韩| 夜夜爽99久久国产综合精品女不卡| 国产精品老牛| 欧美激情亚洲自拍| 国产乱码精品一区二区三区不卡| 亚洲高清av在线| 国产欧美大片| 久久激情网站| 欧美日韩国产一区二区| 久久久久免费| 国产精品久久久久久久一区探花 | 亚洲欧美制服中文字幕| 亚洲精品欧美| 永久域名在线精品| 免费看亚洲片| 国产精品五月天| 久久国产加勒比精品无码| 欧美a级理论片| 亚洲三级电影在线观看 | 欧美午夜一区二区福利视频| 99在线|亚洲一区二区| 亚洲国产精品视频| 国产综合精品| 亚洲欧美精品中文字幕在线| aa级大片欧美三级| 免费欧美网站| 欧美成人国产va精品日本一级| 欧美xart系列高清| 久久久久久欧美| 国产日产亚洲精品| 亚洲欧美久久久久一区二区三区| 亚洲一区二区视频| 亚洲一区免费网站| 国产日产精品一区二区三区四区的观看方式| 国产欧美韩国高清| 麻豆精品91| 亚洲全部视频| 久久久www成人免费无遮挡大片 | 日韩亚洲精品电影| 免费欧美网站| 性欧美8khd高清极品| 亚洲黄色免费| 久久久综合网站| 欧美xxx成人| 亚洲午夜精品网| 午夜精品久久久久久久99热浪潮 | 六十路精品视频| 国产精品一区二区在线| 欧美精品激情在线| av72成人在线| 国产精品理论片在线观看| 欧美一区二区三区免费看 | 在线精品国产欧美| 老巨人导航500精品| 国产精品久久久久国产a级| 欧美福利电影网| 国模一区二区三区| 亚洲图片在线观看| 久久成人精品视频| 国产精品久久久久久模特| 一区二区三区毛片| 午夜在线a亚洲v天堂网2018| 国产视频自拍一区| 久久视频一区| 亚洲电影自拍| 一本久久a久久免费精品不卡| 欧美日韩国产精品| 亚洲一区二区三区中文字幕 | 亚洲福利国产| 中文亚洲欧美| 国产一区二区三区四区三区四| 久久久久久亚洲精品不卡4k岛国| 亚洲成人在线视频网站| 欧美丝袜一区二区三区| 欧美va天堂| 一区二区三区高清在线观看| 久久久www成人免费精品| 可以免费看不卡的av网站| 亚洲欧洲一区二区三区在线观看 | 免费成人激情视频| 午夜国产精品视频免费体验区| 国产精品一区二区在线观看| 欧美一区二区三区婷婷月色 | 日韩网站免费观看| 亚洲福利在线观看| 欧美日韩国产一区| 久久精品1区| 久久精品一区二区三区中文字幕| 1024亚洲| 国产精品乱码| 玖玖国产精品视频| 一本色道久久综合亚洲精品小说 | 亚洲视频播放| 欧美高清在线视频| 欧美一区二区三区免费观看| 欧美日本视频在线| 欧美一级理论片| 亚洲精品女av网站| 久久久精品欧美丰满| 亚洲天堂av在线免费| 亚洲国产91色在线| 国产亚洲欧美日韩在线一区| 欧美色欧美亚洲另类二区| 美女脱光内衣内裤视频久久网站| 午夜久久tv| 欧美激情综合色| 美国十次成人| 久久综合九色九九| 欧美一级片一区| 一区二区三区欧美亚洲| 亚洲精品一区二区三| 欧美激情小视频| 欧美成人一二三| 美日韩精品免费| 久久综合狠狠综合久久综青草| 午夜精品在线视频| 亚洲在线视频免费观看| 在线视频一区二区| 一本久道久久综合中文字幕| 99re国产精品| 亚洲麻豆av| 国产精品大片免费观看| 欧美伦理影院| 欧美高清hd18日本| 欧美v亚洲v综合ⅴ国产v| 久久三级福利| 久久久久久午夜| 久久躁日日躁aaaaxxxx| 久久精品免费电影| 久久久久久9| 欧美xx视频| 欧美视频二区| 国产欧美日本| 国内久久精品视频| 韩国v欧美v日本v亚洲v| 欧美精品一线| 欧美日韩综合| 国产精品视频免费| 国产亚洲a∨片在线观看| 黄色成人av在线| 亚洲国产成人精品久久| 91久久一区二区| 亚洲视频一二| 欧美亚洲日本网站| 亚洲欧美日韩国产一区二区| 午夜精品亚洲| 美国三级日本三级久久99| 欧美日本视频在线|