洛谷P2894 Hotel 線段樹 二分查詢

2022-05-20 12:30:13 字數 920 閱讀 1867

題目大意:給定乙個長度為 n 的序列,每個點有兩種狀態 1/0,表示占有和空閒,現支援 first-fit 查詢是否有一段連續的長度為 x 的空閒子串行和區間賦值操作。

**如下

#include using namespace std;

const int maxn=5e4+10;

int n,m,opt;

struct nodet[maxn<<1];

int tot,root;

inline void pushup(int o,int l,int r)

inline void pushdown(int o,int l,int r)

int build(int l,int r)

int mid=l+r>>1;

ls(o)=build(l,mid),rs(o)=build(mid+1,r);

pushup(o,l,r);

return o;

}void modify(int o,int l,int r,int x,int y,int flag)

int mid=l+r>>1;

pushdown(o,l,r);

if(y<=mid)modify(ls(o),l,mid,x,y,flag);

else if(x>mid)modify(rs(o),mid+1,r,x,y,flag);

else modify(ls(o),l,mid,x,mid,flag),modify(rs(o),mid+1,r,mid+1,y,flag);

pushup(o,l,r);

}int query(int o,int l,int r,int len)

int main()

}else if(opt==2)

} return 0;

}

線段樹2 洛谷p3373 線段樹

題目位址 解釋 多了乙個乘法操作,可以考慮優先順序。每次先算乘法。首先,對於乙個區間 和為s 假設已經按 a 乘b進行了操作。值得到的值為 s a b sb ab 假設先乘得到 sb a 這樣相比,add應該還要再乘上乙個b才對,所以,當更新到乙個區間時,為了進行先乘的操作而不讓結果發生變化,應該將...

洛谷 P2894 USACO08FEB 酒店

題目描述 用線段樹維護三個值 區間最長空位長度,從左端點可以延伸的最長空位長度,從右端點可以延伸的最長空位長度。include include using namespace std const int n 2e6 7 int n,m intlen n max n maxl n maxr n laz...

洛谷 P3372 線段樹 1

今天植樹節,來種一棵線段樹。傳送門如題,已知乙個數列,你需要進行下面兩種操作 1.將某區間每乙個數加上x 2.求出某區間每乙個數的和 輸入格式 第一行包含兩個整數n m,分別表示該數列數字的個數和操作的總個數。第二行包含n個用空格分隔的整數,其中第 i 個數字表示數列第 i 項的初始值。接下來m行每...