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

ACM___________________________

______________白白の屋
posts - 182, comments - 102, trackbacks - 0, articles - 0
<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用鏈接

留言簿(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://www.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>
            亚洲黄页视频免费观看| 99在线精品视频在线观看| 欧美一区二区三区电影在线观看| 亚洲毛片在线| 欧美性做爰毛片| 午夜精品久久久久久99热软件| 亚洲素人在线| 国产视频精品va久久久久久| 久久精品视频在线看| 久久xxxx| 91久久精品视频| 99视频有精品| 国产日韩专区在线| 久久综合色综合88| 欧美刺激性大交免费视频| 亚洲美女av黄| 亚洲性av在线| 国内精品国产成人| 欧美福利在线观看| 欧美日韩国产成人高清视频| 亚洲欧美bt| 久久在线播放| 亚洲桃花岛网站| 性xx色xx综合久久久xx| 亚洲激情第一页| 亚洲天堂av电影| 亚洲国产精品久久久久婷婷884 | 亚洲精品欧美一区二区三区| 亚洲人成在线观看网站高清| 欧美深夜影院| 久久国产婷婷国产香蕉| 牛人盗摄一区二区三区视频| 亚洲综合三区| 蜜臀久久久99精品久久久久久| 一区二区三区四区蜜桃| 欧美一区视频| 99精品热视频只有精品10| 亚洲欧美日本国产有色| 亚洲日本va午夜在线影院| 亚洲一区二区视频在线| 亚洲国产成人久久| 先锋影音一区二区三区| 中文国产成人精品久久一| 久久久精品国产一区二区三区| 99www免费人成精品| 久久精品久久综合| 亚洲欧美日韩精品久久| 欧美91精品| 久久久久久久久岛国免费| 欧美三级日本三级少妇99| 欧美多人爱爱视频网站| 国外成人性视频| 亚洲女爱视频在线| 亚洲网站在线| 欧美激情一区在线观看| 欧美v亚洲v综合ⅴ国产v| 国产欧美日韩另类视频免费观看| 一本不卡影院| 99国产精品久久久久老师| 久久久91精品国产| 久久精品国产亚洲一区二区三区| 欧美日韩亚洲一区二区三区在线| 欧美韩国在线| 亚洲国产精品电影在线观看| 久久精品人人做人人综合| 久久精品欧美日韩| 国产日韩欧美视频| 性色av一区二区三区红粉影视| 亚洲色图自拍| 欧美视频第二页| 99日韩精品| 国产精品99久久久久久久久| 欧美女同视频| 亚洲美洲欧洲综合国产一区| 国产精品99久久久久久人| 欧美日韩色一区| 亚洲午夜久久久| 午夜电影亚洲| 国产一区二区三区久久悠悠色av | 亚洲国产天堂久久综合| 亚洲激情av| 欧美二区视频| 日韩网站在线看片你懂的| 一区二区三区欧美成人| 欧美午夜电影在线| 新67194成人永久网站| 久久蜜桃精品| 亚洲精品国产拍免费91在线| 欧美日本一道本在线视频| 99国产一区二区三精品乱码| 先锋影音国产精品| 极品尤物久久久av免费看| 女主播福利一区| 亚洲视频在线播放| 久久这里只有| 日韩一级在线观看| 国产免费一区二区三区香蕉精| 久久爱www久久做| 亚洲国产精品女人久久久| 亚洲一区国产精品| 国内久久婷婷综合| 欧美激情综合五月色丁香| 亚洲影音一区| 欧美/亚洲一区| 亚洲一区二区视频在线| 国产一区91| 欧美精品在欧美一区二区少妇| 亚洲一区免费视频| 欧美电影打屁股sp| 性久久久久久| 亚洲免费av网站| 国产亚洲激情在线| 欧美激情亚洲精品| 久久国产色av| 一区二区三区视频在线看| 欧美成人精品h版在线观看| 午夜在线成人av| 亚洲理论在线观看| 一区免费在线| 国产日韩欧美中文| 欧美日本在线| 久久午夜精品| 欧美一区在线看| 夜夜夜久久久| 亚洲激情在线| 久久综合中文色婷婷| 午夜欧美视频| 亚洲午夜精品| 亚洲精品国产精品久久清纯直播| 国产日韩三区| 国产精品免费一区二区三区观看| 欧美激情一区二区三区蜜桃视频| 香蕉久久国产| 亚洲欧美日韩国产一区二区| 99精品国产福利在线观看免费| 欧美肥婆bbw| 免费h精品视频在线播放| 久久久久久网| 欧美在线视频a| 性欧美超级视频| 欧美在线视频一区二区三区| 亚洲男人第一av网站| 正在播放亚洲一区| 一本色道**综合亚洲精品蜜桃冫 | 激情六月综合| 国产一区二区三区高清在线观看| 国产伦精品一区二区三区四区免费 | 久久久av网站| 久久99在线观看| 欧美一进一出视频| 欧美在线啊v| 欧美一区成人| 久久精品日韩| 另类av一区二区| 免费观看久久久4p| 免费在线观看精品| 欧美福利视频| 欧美日韩在线大尺度| 欧美日韩一区在线| 国产精品青草久久| 国产综合亚洲精品一区二| 国产一区二区三区黄| 在线不卡视频| 亚洲精品乱码久久久久久久久| 亚洲激情在线观看| 日韩午夜在线电影| 亚洲永久在线观看| 久久精品欧美日韩| 欧美h视频在线| 亚洲精品一品区二品区三品区| 亚洲精品永久免费| 亚洲欧美日韩一区二区| 久久精品亚洲一区二区| 嫩模写真一区二区三区三州| 欧美日本一区| 国产精一区二区三区| 狠狠色综合色区| 一区二区欧美国产| 欧美尤物巨大精品爽| 欧美成人免费网| 亚洲视频高清| 久久一区二区三区超碰国产精品| 欧美久久精品午夜青青大伊人| 国产精品免费在线| 91久久一区二区| 欧美伊久线香蕉线新在线| 欧美国产日韩一区二区| 亚洲视频国产视频| 葵司免费一区二区三区四区五区| 欧美三级电影一区| 在线成人av.com| 亚洲午夜激情网页| 欧美~级网站不卡| 亚洲一区二区三区四区五区黄| 久久久久久亚洲综合影院红桃 | 香蕉成人伊视频在线观看| 久久午夜精品一区二区| 国产精品久线观看视频| 91久久久国产精品| 久久嫩草精品久久久精品一|