csu2170千萬別用樹套樹

2021-09-19 15:23:10 字數 1322 閱讀 4024

千萬別用樹套樹

bobo 精通資料結構!他想維護乙個線段的集合 s。初始時,s 為空。他會依次進行 q 次操作,操作有 2 種。

幫 bobo 求出每次詢問的答案。

輸入檔案包含多組資料,請處理到檔案結束。

每組資料的第一行包含 2 個整數 n 和 q. 其中 n 表示操作中 r 的最大值。

接下來 q 行中的第 i 行包含 3 個整數 t

i, l

i, r

i,表示第 i 個操作屬於型別 t

i,對應的引數是 l

i 和 r

i.對於每個型別 2 的詢問,輸出 1 個整數表示對應的數量。

1 2

1 1 1

2 1 1

4 41 1 4

2 2 3

1 1 4

2 2 3

1

12

hint

2018湖南省第14屆大學生計算機程式設計競賽

這個題是湖南2023年省賽的題目,當年大一比賽的時候巨菜,現在稍微學了一些知識了之後就回來補補題。

這個題的思想是把插入的每個線段的前端點和後端點存入倆個不同的陣列中儲存s1和s2。當要查詢的時候我們讓插入的線段總數(cnt)減去  右端點比要查詢的左端點的值大的數 和 左端點比要查詢區間右端點的值要小的數 最後得出的就是所有能覆蓋這個查詢區間的線段數。我們採用線段樹的方式來維護。

下面是ac**:

#includeusing namespace std;

const int maxn=1e5+5;

int n,m,s1[maxn*4],s2[maxn*4],a,b,c,cnt;

void update(int l,int r,int res,int pos,int t)

int mid=(l+r)/2;

if(pos<=mid) update(l,mid,res*2,pos,t);

else update(mid+1,r,res*2+1,pos,t);

t[res]=t[res*2]+t[res*2+1];

}int query(int l,int r,int res,int l,int r,int t)

int mid=(l+r)/2,ans=0;

if(l<=mid) ans+=query(l,mid,res*2,l,r,t);

if(r>mid) ans+=query(mid+1,r,res*2+1,l,r,t);

return ans;

}int main()

else

}} return 0;

}

樹狀陣列 千萬別用樹套樹

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k special judge,64bit io format lld 題目描述 bobo 精通資料結構!他想維護乙個線段的集合 s。初始時,s 為空。他會依次進行 q 次操作,操作有 2 種。輸入檔案包含多組資...

csu2107 千萬別用樹套樹 權值線段樹 2

問題描述 bobo 精通資料結構!他想維護乙個線段的集合 s。初始時,s 為空。他會依次進行 q 次操作,操作有 2 種。型別 1 給出 l,r,向集合 s 中插入線段 l,r 型別 2 給出 l,r,詢問滿足 x,y s 且 x l r y 的線段 x,y 數量。幫 bobo 求出每次詢問的答案。...

樹狀陣列 H千萬別用樹套樹

解題思路 兩棵bit分別存線段的開始點和結束點 兩個陣列存開始點和結束點的線段數量 針對每次詢問 用匯流排段數 區間右邊的線段 結尾小於等於x 區間左邊的線段 開頭大於等於x 當前線段內被完全包含 開頭結尾在當前區間內即為答案 zeolim an ac a day keeps the bug awa...