題目大意:給n個區間,有的區間可能覆蓋掉其他區間,問沒有完全被其他區間覆蓋的區間有幾個?區間依次給出,如果有兩個區間完全一樣,則視為後面的覆蓋前面的。
題目分析:區間可能很長,所以要將其離散化。但離散化之後區間就變成了連續的,不再是離散的。也就是葉子由左右端點為u、u變成了左右端點為u-1、u,左右兒子有(l,mid)和(mid+1,r)變成了(l,mid)和(mid,r)。所以離散化之後要以長度為1的區間為葉子節點建立線段樹,而不是以1、2、3...為葉子節點建線段樹。
**如下:
# include# include# include# include# include# includeusing namespace std;const int n=200000;
int tr[n*4+5];
int n,m;
int lazy[n*4+5];
int x[n+5],y[n+5];
sets;
mapmp;
int num[n+5];
void pushdown(int rt,int l,int r)
void update(int rt,int l,int r,int l,int r,int val)
else
}void query(int rt,int l,int r)
if(lazy[rt]!=-1)
int mid=l+(r-l)/2;
query(rt<<1,l,mid);
query(rt<<1|1,mid+1,r);
}int f(int l,int r,int x)
return l;
}int main()
sort(num+1,num+num[0]+1);
memset(tr,-1,sizeof(tr));
memset(lazy,-1,sizeof(lazy));
for(int i=0;is.clear();
query(1,1,num[0]-1);
printf("%d\n",s.size());
}return 0;
}
hihoCoder1079 線段樹 離散化
線段樹 離散化 時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述小hi和小ho在回國之後,重新過起了朝7晚5的學生生活,當然了,他們還是在一直學習著各種演算法 這天小hi和小ho所在的學校舉辦社團文化節,各大社團都在宣傳欄上貼起了海報,但是貼來貼去,有些海報就會被其他社...
hiho 1079 離散化 線段樹
給定乙個區間0 l,以及n條線段 li,ri 這n條線段按照輸入順序覆蓋到0 l區間。0問最後有幾條線段沒有被完全覆蓋?算是線段樹的另一種使用,雖然標題是離散化,但其實是連續區間下使用線段樹。中間還有一些小問題要處理,就是線段樹的邊界問題。離散情況下,線段樹每乙個節點都代表乙個個體 連續情況下,每乙...
hihoCoder 1116 計算 線段樹
題意 描述現在有乙個有n個元素的陣列a1,a2,an。記f i,j ai ai 1 aj。初始時,a1 a2 an 0,每次我會修改乙個ai的值,你需要實時反饋給我 f i,j 1 i j n 的值 mod 10007。輸入第一行包含兩個數n 1 n 100000 和q 1 q 500000 接下來...