bobo 精通資料結構!他想維護乙個線段的集合 s。初始時,s 為空。他會依次進行 q 次操作,操作有 2 種。
* 型別 1:給出 l, r,向集合 s 中插入線段 [l, r].
* 型別 2:給出 l, r,詢問滿足 [x,y]∈s[x, y] \in s[x,y]∈s 且 x≤l≤r≤yx \leq l \leq r \leq yx≤l≤r≤y 的線段 [x, y] 數量。
幫 bobo 求出每次詢問的答案。
輸入檔案包含多組資料,請處理到檔案結束。每組資料的第一行包含 2 個整數 n 和 q. 其中 n 表示操作中 r 的最大值。
接下來 q 行中的第 i 行包含 3 個整數 ti,li,rit_i, l_i, r_iti,li,ri,表示第 i 個操作屬於型別 tit_iti,對應的引數是 lil_ili 和 rir_iri.
對於每個型別 2 的詢問,輸出 1 個整數表示對應的數量。示例1
複製
1 2複製1 1 1
2 1 1
4 41 1 4
2 2 3
1 1 4
2 2 3
112
* 1≤n,q≤1051 \leq n, q \leq 10^51≤n,q≤105仔細觀察就會發現,有乙個條件非常重要:ri-li<=2,也就是說查詢的區間非常小,最長不超過2,那麼這就不存在* ti∈t_i \in \ti∈
* 1≤li≤ri≤n1 \leq l_i \leq r_i \leq n1≤li≤ri≤n
* 對於 ti=2t_i = 2ti=2 的操作,ri−li≤2r_i - l_i \leq 2ri−li≤2 成立。
* 資料組數不超過 10.
qlusing 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;
}
樹狀陣列 H千萬別用樹套樹
解題思路 兩棵bit分別存線段的開始點和結束點 兩個陣列存開始點和結束點的線段數量 針對每次詢問 用匯流排段數 區間右邊的線段 結尾小於等於x 區間左邊的線段 開頭大於等於x 當前線段內被完全包含 開頭結尾在當前區間內即為答案 zeolim an ac a day keeps the bug awa...
2018湖南省賽總結
2018湖南省賽總結 省賽銅牌,有點可惜,被乙個打表題卡了三個小時。其實這題完全可以早點出的。寫一下省賽比賽的心路歷程吧。這個對以後的比賽有用。9點比賽,8.55發的題面。發完題面之後,立馬發現a題是簽到題,立馬丟給zqg寫,很快一發a了a題,之後的題都沒有那麼明顯的簽到,讀完b題之後,和隊友說題意...
樹狀陣列 千萬別用樹套樹
時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k special judge,64bit io format lld 題目描述 bobo 精通資料結構!他想維護乙個線段的集合 s。初始時,s 為空。他會依次進行 q 次操作,操作有 2 種。輸入檔案包含多組資...