有一間旅館,旅館內有n間排成一排的房間,一開始全為空。現在有m個要求:
1 d表示詢問旅館內是否有連續d間空房間,有的話則輸出最小的乙個r,滿足從r開始連續d間房間均為空,同時會有人入住這d間房。若無法被滿足,則輸出0.
2 l r表示把[l,r]內的房間全部設為空。
第一行兩個整數n,m.
接下來m行,每行描述乙個操作。
對於每乙個1操作,輸出一行表示答案。
【資料規模與約定】
對於30%的資料,n,m<=1000
對於100%的資料,n,m<=50000,d,l,r<=n
by bpm
線段樹區間合併
考慮用llen、rlen、len分別記錄區間左起最長連續0、右起最長連續0、最長連續0,查詢的時候優先查詢左子樹即可。合併的時候分情況討論一下就行了。
心疼基哥500行+程式wa了
#include #include
#include #include #include #include #define rep(i, st, ed) for (int i = st; i <= ed; i += 1)
#define drp(i, st, ed) for (int i = st; i >= ed; i -= 1)
#define erg(i, st) for (int i = ls[st]; i; i = e[i].next)
#define fill(x, t) memset(x, t, sizeof(x))
#define max(x, y) (x)>(y)?(x):(y)
#define min(x, y) (x)<(y)?(x):(y)
#define ll long long
#define db double
#define inf 0x3f3f3f3f
#define n 100001
struct treenodet[n << 2 | 1];
inline int read()
while (ch<='9'&&ch>='0')
return x*v;
}inline void pushdown(int
now) else
if (t[now].lazy == 2)
}inline void pushup(int
now) else
if (t[now
<< 1 | 1].r - t[now
<< 1 | 1].l + 1 == t[now
<< 1 | 1].rlen)else
t[now].len = max(t[now
<< 1].rlen + t[now
<< 1 | 1].llen, max(t[now
<< 1].len, t[now
<< 1 | 1].len));
}inline int query(int
now, int d) else
if (t[now
<< 1].len >= d) else
if (t[now
<< 1].rlen + t[now
<< 1 | 1].llen >= d) else
}inline void modify(int
now, int l, int r)
intmid = (t[now].l + t[now].r) >> 1;
if (r <= mid) else
if (l > mid) else
pushup(now);
}inline void clear(int
now, int l, int r)
intmid = (t[now].l + t[now].r) >> 1;
if (r <= mid) else
if (l > mid) else
pushup(now);
}inline void build(int
now, int l, int r) ;
if (l == r)
intmid = (t[now].l + t[now].r) >> 1;
build(now
<< 1, l, mid);
build(now
<< 1 | 1, mid + 1, r);
}int main(void)
int pos = query(1, d); modify(1, pos, pos + d - 1);
printf("%d\n", pos);
} else
if (opt == 2)
}return 0;
}
2023年8月7日提高組T3 選數
給出n個數a i 現在可以在其中任意選出若干個數,問有多少種選擇方案,使得這幾個數可以分成兩個和相等的集合。第一行是乙個正整數n,第二行每行n個正整數。輸出乙個數,表示方案數。對於30 的資料,n 10.對於100 的資料,n 20,a i 100000000.by bpm 略難每個數字前可以填1 ...
2023年8月10號提高組T3 樹
給你一棵大小為n的有根樹,每個點有點權,要求完成以下操作 v x y把點x的權值變成y e x把有根樹的根變為x q x查詢點x的子樹的最小值 第一行兩個整數n,m,表示點數和運算元。接下來n行,每行兩個數f,v,第i行的兩個數表示i的父親和i的權值,且保證f接下來m行,每行表示乙個操作。對於每個q...
2023年9月16日提高組T2 A
description 為了加快社會主義現代化,建設學校,小明決定給學校裡每台電腦都連上網際網路,方便未來隨時隨地玩耍。他的電腦室很大,有n 臺電腦,但地理位置偏僻,網路訊號很差。一台電腦有網,當且僅當滿足以下至少乙個條件 1 給中國移動交寬頻費,直接連網,花費為a。2 向另外一台有網的電腦,安裝共...