亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

【POJ 3667】Hotel

2019-11-14 09:23:08
字體:
來源:轉載
供稿:網友

POJ 3667

題意

有n個房間和k個操作,最開始全部為空。操作1:輸入一個數d,找出連續d個空房間,輸出起點房間編號。若有多個輸出最小的,如果不存在輸出0。操作2:輸入兩個數x和d,清空從x開始的d個房間。

樣例輸入

10 6 1 3 1 3 1 3 1 3 2 5 5 1 6

樣例輸出

1 4 7 0 5


sol

用線段樹維護,每個節點存儲三個值msum,lsum,rsum。msum表示當前區間最長的連續空房間數量;lsum表示當前區間[l,r]中從l開始連續向右空房間數量;rsum表示當前區間[l,r]中從r開始連續向左空房間數量。 主要的操作集中在如何更新父節點(也就是區間合并操作)。

首先,把左孩子的lsum賦給自己的lsum,rsum同理。

lsum[rt] = lsum[rt<<1];rsum[rt] = rsum[rt<<1|1];

這時候如果左孩子全部為空,則可以和右孩子左側的空房間連接在一起。同理,如果右孩子全部為空,則可以和左孩子右側德空房間連接在一起。

if (lsum[rt] == m - (m >> 1)) lsum[rt] += lsum[rt<<1|1]; if (rsum[rt] == (m >> 1)) rsum[rt] += rsum[rt<<1];

msum有兩三種計算方法:空房間全部在左孩子;空房間全部在右孩子;空房間從左孩子的右側到右孩子的左側。

msum[rt] = max(lsum[rt<<1|1]+rsum[rt<<1],max(msum[rt<<1],msum[rt<<1|1]));

這就是區間合并的寫法:

void pushup(int rt,int m) //更新父節點 { lsum[rt] = lsum[rt<<1]; rsum[rt] = rsum[rt<<1|1]; if (lsum[rt] == m - (m >> 1)) lsum[rt] += lsum[rt<<1|1]; //若左孩子全為空 則和右孩子合并 if (rsum[rt] == (m >> 1)) rsum[rt] += rsum[rt<<1]; msum[rt] = max(lsum[rt<<1|1]+rsum[rt<<1],max(msum[rt<<1],msum[rt<<1|1]));//左孩子或右孩子或在中間合并 }

查詢時,也是分為三種情況: 空房間全部在左孩子:if (msum[rt<<1] >= w) return query(w,lson); 空房間橫跨左孩子和右孩子:if (rsum[rt<<1] + lsum[rt<<1|1] >= w) return mid - rsum[rt<<1] + 1; 空房間全部在右孩子:return query(w,rson);

完整代碼:

#include<cmath>#include<cstdio>#include<vector>#include<cstring>#include<iomanip>#include<stdlib.h>#include<iostream>#include<algorithm>#define ll long long#define inf 1000000000#define mod 1000000007#define N 1000000#define lson l,mid,rt << 1#define rson mid+1,r,rt << 1 | 1using namespace std;int n,m,op,a,b;int lsum[N],rsum[N],msum[N],cover[N];void build(int l,int r,int rt) //msum當前區間最長連續空 l/rsum前綴/后綴最長連續空 { msum[rt] = lsum[rt] = rsum[rt] = r - l + 1; cover[rt] = -1; if (l == r) return; int mid = (l + r) >> 1; build(lson); build(rson);}void pushdown(int rt,int m) //標記下傳 { if (cover[rt] != -1) { cover[rt<<1] = cover[rt<<1|1] = cover[rt]; if (cover[rt] == 0) msum[rt<<1] = lsum[rt<<1] = rsum[rt<<1] = m - (m >> 1); else msum[rt<<1] = lsum[rt<<1] = rsum[rt<<1] = 0; if (cover[rt] == 0) msum[rt<<1|1] = lsum[rt<<1|1] = rsum[rt<<1|1] = m >> 1; else msum[rt<<1|1] = lsum[rt<<1|1] = rsum[rt<<1|1] = 0; cover[rt] = -1; }}void pushup(int rt,int m) //更新父節點 { lsum[rt] = lsum[rt<<1]; rsum[rt] = rsum[rt<<1|1]; if (lsum[rt] == m - (m >> 1)) lsum[rt] += lsum[rt<<1|1]; //若左孩子全為空 則和右孩子合并 if (rsum[rt] == (m >> 1)) rsum[rt] += rsum[rt<<1]; msum[rt] = max(lsum[rt<<1|1]+rsum[rt<<1],max(msum[rt<<1],msum[rt<<1|1]));//左孩子或右孩子或在中間合并 }void update(int L,int R,int c,int l,int r,int rt){ if (L <= l && r <= R) { if (c == 0) msum[rt] = lsum[rt] = rsum[rt] = r - l + 1; else msum[rt] = lsum[rt] = rsum[rt] = 0; cover[rt] = c; return; } pushdown(rt,r-l+1); int mid = (l + r) >> 1; if (L <= mid) update(L,R,c,lson); if (mid < R) update(L,R,c,rson); pushup(rt,r-l+1);}int query(int w,int l,int r,int rt){ if (l == r) return l; pushdown(rt,r-l+1); int mid = (l + r) >> 1; if (msum[rt<<1] >= w) return query(w,lson); else if (rsum[rt<<1] + lsum[rt<<1|1] >= w) return mid - rsum[rt<<1] + 1; return query(w,rson); }int main(){ cin>>n>>m; build(1,n,1); while (m--) { cin>>op; if (op == 1) { scanf("%d",&a); if (msum[1] < a) cout<<0<<endl; else { int p = query(a,1,n,1); cout<<p<<endl; update(p,p+a-1,1,1,n,1); } } else { scanf("%d%d",&a,&b); update(a,a+b-1,0,1,n,1); } } return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲图片制服诱惑| 日韩免费精品视频| 国产精品视频不卡| 亚洲精品91美女久久久久久久| 精品人伦一区二区三区蜜桃免费| 日韩中文av在线| 日韩欧美国产视频| 欧美亚洲国产另类| 欧美一级大胆视频| 97热精品视频官网| 亚洲美女自拍视频| 国产精品成人免费电影| 亚洲xxxxx电影| 欧美电影《睫毛膏》| 91精品国产自产在线老师啪| 欧美精品在线第一页| 日本精品va在线观看| 91福利视频网| 欧美疯狂做受xxxx高潮| 欧美主播福利视频| 91国内揄拍国内精品对白| 91成人免费观看网站| 日韩天堂在线视频| 深夜成人在线观看| 欧美视频中文字幕在线| 日韩精品亚洲元码| 91久久嫩草影院一区二区| 亚洲国产成人在线播放| 欧美日韩中文在线| 欧美成人合集magnet| 亚洲精品国产综合久久| 欧美激情一级二级| 欧美劲爆第一页| 亚洲嫩模很污视频| 日本不卡视频在线播放| 日韩中文字幕精品视频| 国产精品福利在线观看| 91精品国产91久久久久久不卡| 欧美人与性动交| 亚洲国产私拍精品国模在线观看| 国产精品电影在线观看| 精品中文字幕久久久久久| 亚洲精品二三区| 欧美激情精品久久久久久免费印度| 国产一区二区三区视频在线观看| 国产成人免费av| 欧美xxxx做受欧美| 久久在线观看视频| 亚洲欧美一区二区三区在线| 91大神福利视频在线| 伊人久久男人天堂| 在线播放亚洲激情| 欧美最猛性xxxxx(亚洲精品)| 青青在线视频一区二区三区| 亚洲午夜国产成人av电影男同| 亚洲国产精品女人久久久| 精品国产成人av| 日韩免费在线播放| 日日骚久久av| 精品视频偷偷看在线观看| 国产精品99导航| 久久夜色精品亚洲噜噜国产mv| 亚洲福利视频网站| 91精品国产91久久久久福利| 亚洲一区二区久久| 在线观看视频亚洲| 国产视频一区在线| 精品性高朝久久久久久久| 精品国产91久久久| 91人人爽人人爽人人精88v| 欧美交受高潮1| 性欧美激情精品| 原创国产精品91| 精品偷拍一区二区三区在线看| 欧美日韩国产精品| 成人福利免费观看| 欧美日韩一区二区三区在线免费观看| 久久夜色精品国产欧美乱| 日韩免费黄色av| 国产精品久久久久久久久久小说| 国内精久久久久久久久久人| 久久免费视频观看| 乱亲女秽乱长久久久| 欧美一级片免费在线| 三级精品视频久久久久| 国产精品白丝jk喷水视频一区| 国产免费一区二区三区在线能观看| 久久网福利资源网站| 国产精品亚洲第一区| 欧美巨大黑人极品精男| 欧美精品情趣视频| 九九久久精品一区| 日韩亚洲欧美中文在线| 91精品久久久久久久久久久久久| 国产aⅴ夜夜欢一区二区三区| 在线看国产精品| 2021久久精品国产99国产精品| 久久亚洲精品小早川怜子66| 亚洲日本欧美日韩高观看| 欧美另类暴力丝袜| 精品日本美女福利在线观看| 成人在线视频网| 久久99国产精品自在自在app| 国产欧美亚洲视频| 91久久精品一区| 欧美成人午夜免费视在线看片| 91精品视频网站| 久久精品国产一区二区电影| 日韩欧美主播在线| 欧美一区三区三区高中清蜜桃| 欧美成人免费在线视频| 欧美国产日韩视频| 国产成人一区三区| 国产一区二中文字幕在线看| 精品成人乱色一区二区| 国产69精品久久久久9999| 欧美成人免费大片| 精品视频www| 亚洲一区二区精品| 成人免费福利视频| 欧美在线观看www| 国产精品久久久久久久久久久久久久| 国产日韩欧美中文在线播放| 成人日韩在线电影| 欧美激情喷水视频| 色诱女教师一区二区三区| 91精品国产网站| 国产成人97精品免费看片| 精品在线观看国产| 欧美一级淫片丝袜脚交| 日韩精品在线播放| 成人性生交大片免费看视频直播| 91精品国产乱码久久久久久久久| 欧美视频二区36p| 国产精品视频网址| 日韩av有码在线| 久久99国产精品久久久久久久久| 亚洲男人天堂九九视频| 国产福利成人在线| 38少妇精品导航| 日韩精品中文字幕有码专区| 久久精视频免费在线久久完整在线看| 欧美精品久久久久久久久久| 亚洲成人精品视频| 亚洲国产成人久久| 国产欧美日韩精品丝袜高跟鞋| 96pao国产成视频永久免费| 国产做受69高潮| 精品国产一区久久久| 国产第一区电影| 自拍偷拍亚洲区| 在线观看欧美日韩| 一区二区欧美在线| 黑人巨大精品欧美一区二区免费| 91久久国产综合久久91精品网站| 国外成人在线视频| 亚洲精品永久免费精品| 国产福利精品视频| 国产精品久久在线观看| 精品无人区太爽高潮在线播放| 91国在线精品国内播放| 欧美精品videofree1080p| 欧美日韩激情视频8区| 欧美激情中文网|