HDOJ 6681 離散化 線段樹

2022-06-09 10:57:10 字數 929 閱讀 9262

首先需要先按y的值進行從小到大排序。

再對y進行離散化,所謂離散化就是將y排序後的點放在乙個陣列中,用點在陣列中的序號代替y,達到縮小範圍的作用。

其次再根據x從小到大排序,因為要根據x開始遍歷。首先從左到右遍歷方向指向左的點,計算交點。如果是上下方向的則update線段樹記錄每個點的y覆蓋的線段的長度。再從右到左遍歷。

#include#include#include#include#include#includeusing namespace std;

int n,m,k;

struct line

line(){}

};line line[100005];

long long sumy[100005<<2];//記錄每乙個縱座標上有多少條上下方向的線經過

long long lazy[100005<<2];//懶標記

bool cmp1(line a,line b)

}void update(int x,int y,int cnt,int l,int r)

int mid=(l+r)>>1;

if(x<=mid)

update(x,y,cnt<<1,l,mid);

if(y>mid)

update(x,y,cnt<<1|1,mid+1,r);

}void push_down(int cnt,int l,int r)

long long query(int q,int cnt,int l,int r)

push_down(cnt,l,r);

int mid=(l+r)>>1;

if(l<=q&&r>=q)else

}else return 0;

}int main()

}cout<}

return 0;

}

離散化 線段樹

題目 分析 每次1操作會往序列底加first個second,first 和 second 都是最大1e9的資料,每次2操作詢問序列中第first到第second個數的和 一開始就感覺有點像線段樹,輸入資料太大我們可以離線處理把資料離散化下,然後扔到線段樹上,維護兩個陣列 sum 區間數的值的和 nu...

資料離散化 線段樹

前言 遇到了乙個矩形面積堆疊的問題,想了很久。終於找到了方法。先做個小記,待到具體問題時再分析。資料離散化 高大上的名字,其實就是對資料的一種處理,也可以採取陣列 或者 容器 map vector。之類的來儲存。之前的ibm技術俱樂部主席競選 那道題其實就是很好的應用。有些資料本身很大,自身無法作為...

紙帶 線段樹 離散化

題目大意 每次給一段區間染色,求最後整個區間有多少種顏色 分析 用膝蓋想也知道這題線段樹可以輕鬆水過,於是出題人靈機一動,挖了個深坑,每次給的區間是左開右閉的,但題目沒說,他給了你一張圖,你們可以感受一下 於是正解wa成0分我也是很絕望的。有一點要注意一下,離散化後有些區間會並在一起,原來中間的顏色...