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

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://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>
            性欧美在线看片a免费观看| 亚洲欧美不卡| 欧美激情精品久久久| 麻豆9191精品国产| 亚洲人久久久| 中文一区二区| 国内精品视频666| 亚洲福利专区| aa国产精品| 国产三级精品三级| 欧美xxx在线观看| 欧美三级视频| 噜噜噜久久亚洲精品国产品小说| 麻豆精品精华液| 久久亚洲精品伦理| 欧美国产日产韩国视频| 亚洲伊人第一页| 久久在线免费| 午夜一区不卡| 国产精品嫩草99av在线| 暖暖成人免费视频| 在线成人www免费观看视频| 日韩视频免费观看| 狠狠狠色丁香婷婷综合久久五月 | 久久久亚洲国产天美传媒修理工| 亚洲国产高清aⅴ视频| 一区二区国产日产| 狠狠色综合网站久久久久久久| 午夜影院日韩| 亚洲天堂久久| 免费欧美高清视频| 久久精品一区四区| 欧美新色视频| 亚洲国产成人精品女人久久久| 伊人久久婷婷色综合98网| 久久久亚洲一区| 亚洲二区在线| 一区二区三区.www| 欧美大片第1页| 久久综合五月天婷婷伊人| 在线看成人片| 欧美伊人久久久久久久久影院| 中文亚洲欧美| 国产偷久久久精品专区| 欧美一级淫片播放口| 亚洲欧美日韩爽爽影院| 国产亚洲视频在线| 亚洲视屏一区| 亚洲无限av看| 欧美日韩视频一区二区三区| 欧美国产亚洲另类动漫| 一区二区欧美日韩视频| 国产精品一区在线播放| 在线一区二区视频| 久久亚洲精品一区二区| 亚洲精品一二三区| 欧美成人精品| 亚洲一二区在线| 美玉足脚交一区二区三区图片| 国产综合视频在线观看| 欧美电影免费网站| 亚洲欧美日韩天堂| 欧美亚洲在线| 亚洲精品国产系列| 国产亚洲精品aa午夜观看| 欧美成人自拍视频| 亚洲伊人色欲综合网| 欧美一区午夜视频在线观看| 国产日韩欧美精品| 欧美精彩视频一区二区三区| 亚洲精品国产品国语在线app | 久久久久久亚洲综合影院红桃| 国产人成一区二区三区影院| 性18欧美另类| 日韩亚洲在线| 欧美激情女人20p| 久久福利毛片| 亚洲第一区在线| 国产精品久久一区二区三区| 蜜桃av一区二区在线观看| 性欧美xxxx大乳国产app| 亚洲日本欧美| 欧美成人r级一区二区三区| 欧美一区二区免费| 亚洲午夜在线观看| 亚洲免费高清| 国产精品女主播| 欧美精品久久久久a| 久久午夜精品一区二区| 亚洲精品视频在线| 亚洲欧美欧美一区二区三区| 99国内精品久久| 国产精品自拍一区| 欧美日韩三级| 欧美啪啪一区| 午夜精品视频网站| 亚洲午夜久久久久久久久电影网| 亚洲国产一区视频| 久久国产黑丝| 欧美一区二区三区免费大片| 亚洲伊人久久综合| 亚洲免费在线精品一区| 一区二区三区不卡视频在线观看| 亚洲另类在线视频| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲影院在线观看| 99精品国产一区二区青青牛奶| 亚洲国产精品久久久久婷婷884| 欧美成人免费视频| 亚洲视频成人| 亚洲一区二区三区在线看| 亚洲一区久久久| 欧美一乱一性一交一视频| 午夜精品一区二区三区电影天堂 | 一区在线观看视频| 欧美日韩一区二区视频在线| 欧美日韩国产在线播放| 久久亚洲一区二区| 蜜桃精品久久久久久久免费影院| 免费欧美在线视频| 欧美激情亚洲| 国产精品免费一区二区三区观看| 国产精品实拍| 国产精品h在线观看| 国产精品腿扒开做爽爽爽挤奶网站| 国产精品日韩在线| 伊人天天综合| 夜夜夜久久久| 久久精品91久久久久久再现| 中国女人久久久| 亚洲免费在线| 女女同性精品视频| 日韩视频―中文字幕| 亚洲男人第一av网站| 亚洲私拍自拍| 久久久亚洲欧洲日产国码αv| 欧美激情第一页xxx| 国产精品视频不卡| 亚洲国产成人av| 亚洲一区二区高清视频| 久久精品免费播放| 亚洲国内精品在线| 午夜伦理片一区| 欧美精品v国产精品v日韩精品| 国产精品免费观看视频| 在线激情影院一区| 亚洲欧美日韩精品| 欧美电影免费观看高清| 亚洲午夜精品网| 欧美激情91| 国产亚洲一区二区精品| 一本一本久久a久久精品综合麻豆| 欧美在线播放| 日韩视频永久免费| 久久天天躁夜夜躁狠狠躁2022| 欧美午夜理伦三级在线观看| 伊人婷婷久久| 久久se精品一区精品二区| 亚洲黄色一区二区三区| 一本色道久久综合亚洲精品按摩 | 亚洲欧美日韩综合| 欧美激情第六页| 激情婷婷欧美| 亚洲影院高清在线| 亚洲精品一区二区三区不| 久久久精品一品道一区| 老色鬼精品视频在线观看播放| 国产精品mv在线观看| 91久久在线播放| 免费精品视频| 欧美一区二区三区男人的天堂| 欧美视频一区二区三区…| 91久久精品一区| 欧美v国产在线一区二区三区| 欧美一区二区三区四区在线观看地址| 欧美欧美在线| 99热这里只有精品8| 欧美国产日本在线| 久久久精品视频成人| 国产主播喷水一区二区| 久久www成人_看片免费不卡| 亚洲一区bb| 国产精品国产三级国产 | **欧美日韩vr在线| 久久久视频精品| 性欧美超级视频| 国产亚洲精品久| 久久爱www.| 欧美亚洲综合久久| 国产一区二区三区久久悠悠色av| 欧美一区精品| 欧美一激情一区二区三区| 国产午夜精品全部视频在线播放 | 精品动漫3d一区二区三区免费版| 香蕉久久夜色| 亚洲免费中文字幕| 国产一区视频在线观看免费| 久久亚洲私人国产精品va媚药| 欧美在线黄色| 亚洲第一精品夜夜躁人人爽|