用變長為r的正方形最多能框住幾個點,線段樹,離散化,掃瞄線,延時標記lz
#include #include #include #include #include #define n 2005
#define inf (1 << 30)
const double eps = 1e-12;
const double pi = acos(-1.0);
using namespace std;
struct node
;struct line
;int n, r, cnt, ans;
int id[n];
node node[n * 4];
line yline[n];
bool operator < (const line& k1, const line& k2)
int build_tree(int s, int t, int k)
int down(int k)
int insert(int s, int t, int k, int v)
if (node[k].lz != 0) down(k);
mid = (node[k].l + node[k].r) >> 1;
if (t <= mid) insert(s, t, k << 1, v);
else if (s > mid) insert(s, t, (k << 1) + 1, v);
else insert(s, mid, k << 1, v), insert(mid + 1, t, (k << 1) + 1, v);
node[k].v = max(node[k << 1].v, node[(k << 1) + 1].v);
return 1;
}int solve()
return 1;
}int main()
sort(id, id + 2 * n);
cnt = unique(id, id + 2 * n) - id;
solve();
printf("%d\n", ans);
}system("pause");
return 0;
}
hdu1828線段樹 掃瞄線
矩形求周長類似矩形合併求面積,只是多了需要統計豎邊的個數,對於每次求到的下底邊長還要增加目前底邊與下一條底邊之間的豎邊總長 1,n個矩形有2 n條線段,按從小到大排列,如上圖得到的線段順序 開始掃瞄第一條線段,得到總底邊長sum為a這部分,得到豎邊個數segnum 2,每增加一條底邊segnum 2...
hdu5091(掃瞄線 線段樹)
題意 給n個點,和長w寬h的矩形,問矩形最多能包含多少個點。思路 掃瞄線 線段樹,首先將座標轉化成非負數,對於每個點 x,y 標記為1,生成乙個 x w,y 的點,標記為 1,然後將y軸建立線段樹,維護乙個最大值即可。如不不明白的話,畫個圖,理解一下就好了。如下 include include in...
hdu1542(線段樹 掃瞄線)
裸的掃瞄線,學習掃瞄線的題目。具體掃瞄線的原理我不講了,我是看大神們的部落格懂得,就算寫也沒大神屌。下面我給出我的 裡面的注釋是我認為比較重要的地方 include include include includeusing namespace std const int max 210 int n ...