給定一條長度為m的線段,有n個操作,每個操作有3個數字x,y,z表示把區間[x,y]染成顏色z,詢問染完色之後,這條長度為m的線段一共有幾種顏色。規定:線段的顏色可以相同。連續的相同顏色被視作一段。問x軸被分成多少段。
4 20 //四條,總長度為20
10 19 1
2 9 2
5 13 3
15 17 4
資料規模
n <= 100000
m <= 1000000
我以前寫的線段樹都是假的!!(改了我2個中午)
對於每一段,維護乙個左節點,乙個右節點,表示每一段左右端的顏色
#include
#include
#include
using namespace std;
int n,m,a[1000077
*3],c,d;
void ins(int st,int ed,int l,int r,int c,int u)
}}int query(int l,int r,int u,int &lc,int &rc)
if(l==r) return
1; int mid=(l+r)>>1,s=query(l,mid,u*2,lc,lt)+query(mid+1,r,u*2+1,rt,rc);
return
s-(lt==rt?1:0);
}int main()
printf("%d",query(1,n,1,c,d));
}
SSLGZ 2645 線段樹練習題二
問題描述 桌子上零散地放著若干個不同顏色的盒子,桌子的後方是一堵牆。如右圖所示。問從桌子前方可以看到多少個盒子?假設人站得足夠遠 輸入時,由底向上,從左到右 樣例輸入 16 桌子長度 5 盒子數量 4 7 12 14 1 5 6 10 11 16 樣例輸出 4演算法討論 構建線段樹,我們定義區間標記...
線段樹練習題三
time limit 10000ms memory limit 65536k total submit 143 accepted 45 case time limit 1000ms description 給定一條長度為m mm的線段,有n nn個操作,每個操作有3 33個數字x,y z x,y,z...
線段樹 線段樹練習題三
題解。啊好煩懶得看,於是就拿線段樹練習題二改了。給定一條長度為m的線段,有n個操作,每個操作有3個數字x,y,z表示把區間 x,y 染成顏色z,詢問染完色之後,這條長度為m的線段一共有幾種顏色。規定 線段的顏色可以相同。連續的相同顏色被視作一段。問x軸被分成多少段。input 第一行,兩個數n,m分...