hihoCoder 1079(線段樹 離散化)

2022-08-15 06:33:18 字數 1070 閱讀 9252

題目大意:給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 接下來...