題目大意:給定乙個長度為 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行每...