給定一條長度為m的線段,有n個操作,每個操作有3個數字x,y,z表示把區間[x,y]染成顏色z。規定:線段的顏色可以相同。連續的相同顏色被視作一段。詢問染色後的線段被分為多少段。
【線段樹】
cover=-1表示該區間由多種顏色組成。cover>=0表示該區間只有一種單一的顏色cover。
和線段樹練習2差不多
只是要判斷連線在一起的線段顏色是否相同
#includeusing namespace std;
struct nodea[1000001];
int x1,y1,l,n;
void insert(int i,int l,int r,int b,int e,int
color)
//插入演算法(和線段樹練習2一樣)
if (e<=mid) insert(i*2,l,mid,b,e,color);
else
if (b>=mid) insert(i*2+1,mid,r,b,e,color);
else }}
}int count_answer(int i,int l,int r,int &x,int &y)
//統計演算法
else
if (r-l>1)
//不然就只有多種顏色
//但區間表示的範圍必須大於1
return
0;
}int main()
int lc=0,rc=0;
printf("%d",count_answer(1,1,l,lc,rc));
return
0;}
Codevs P1082 線段樹練習3 線段樹
題目描述 description 給你n個數,有兩種操作 1 給區間 a,b 的所有數增加x 2 詢問區間 a,b 的數的和。輸入描述 input description 第一行乙個正整數n,接下來n行n個整數,再接下來乙個正整數q,每行表示操作的個數,如果第乙個數是1,後接3個正整數,表示在區間 ...
線段樹練習
一鍵挖礦 includeusing namespace std define n 2000010 define int long long define f x x 1 x 3 int n,m,tg n x n y n tx 4 ty 4 ans vectorv n struct vac n va ...
codevs 1082 線段樹練習 3
1082 線段樹練習 3 區間修改,區間查詢 時間限制 3 s 空間限制 128000 kb 題目等級 大師 master 給你n個數,有兩種操作 1 給區間 a,b 的所有數增加x 2 詢問區間 a,b 的數的和。輸入描述 input description 第一行乙個正整數n,接下來n行n個整數...