1.掃瞄線掃瞄x軸,線段樹維護y軸。
2.座標+1,線段樹是從1開始維護。然後讓邊長--,這樣就能包含邊上的點了。
3.為了保證點在正方形內:在x軸上利用差分的思想,在x出add(val),在x+r(已經-1了)處add(-val);在y軸上利用線段樹維護1~5001這個區間,在y~y+r上add(val)。
題解部落格大家都是口胡感覺難以講清這個事情,這篇部落格雖然沒解釋但**邏輯不錯,看懂的。
1#pragma comment(linker, "/stack:1024000000,1024000000")
2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include
13 #include 14 #include 15 #include 16 #include
17 #include 18 #include 19 #include 20 #include 21 #include 22
#define init(a, b) memset(a, b, sizeof(a))
23#define rep(i, a, b) for (int i = a; i <= b; i++)
24#define irep(i, a, b) for (int i = a; i >= b; i--)
25#define ls(p) p << 1
26#define rs(p) p << 1 | 1
27using
namespace
std;
2829 typedef double
db;30 typedef long
long
ll;31 typedef unsigned long
long
ull;
32 typedef pairp;
33const
int inf = 0x3f3f3f3f;34
const ll inf =1e18;
3536 template void read(t &x)
4546 template void
write(t x)
5152 template void
writeln(t x)
5657
const
int maxn = 1e4 + 5, m = 5001;58
intn, r, cnt;
59struct
seg t[(m + 5) << 2
];62
struct
node c[maxn << 1
];65
66void build(int l, int r, int
p) 72
int mid = (l + r) >> 1;73
build(l, mid, ls(p));
74 build(mid + 1
, r, rs(p));75}
7677
void push_down(int
p) 86}87
88void add(int l, int r, int p, int
k) 94
push_down(p);
95int mid = (t[p].l + t[p].r) >> 1;96
if (l <=mid) add(l, r, ls(p), k);
97if (mid 98 t[p].mx =max(t[ls(p)].mx, t[rs(p)].mx);99}
100101
int query(int l, int r, int
p) 105
push_down(p);
106int ret = 0
;107
int mid = (t[p].l + t[p].r) >> 1
;108
if (l <= mid) ret =max(ret, query(l, mid, ls(p)));
109if (mid < r) ret = max(ret, query(mid + 1
, r, rs(p)));
110return
ret;
111}
112113
bool
cmp(node a, node b)
117118
intsolve() ;
125 c[++cnt] = ;
126}
127 sort(c + 1, c + 1 +cnt, cmp);
128129
for (int i = 1, j, k; i <= cnt; i =j)
135 ans = max(ans, query(1, m, 1
));136
for (; k < j; k++)
139}
140return
ans;
141}
142143
intmain()
Bzoj1218 雷射炸彈
給你n個點的座標xi,yi。求乙個邊長為k的正方形能覆蓋多少點。可以列舉。但是要加乙個二維字首和。統計的時候可以畫乙個圖。首先a i j 是乙個大矩形。之後在旁邊切掉兩個小矩形,但多切掉了乙個重複部分,要把它加上。include include define rep i begin end for ...
線段樹 掃瞄線
pku 1151 hdu1542 atlantis 矩形面積並 題意 給出n個矩形,每個矩形給出左下角座標,右上角座標。然後求矩形並的總面積 思路 浮點數先要離散化 然後把矩形分成兩條邊,上邊和下邊,對橫軸建樹,然後從下到上掃瞄上去,用cnt表示該區間下邊比上邊多幾個,sum代表該區間內被覆蓋的線段...
掃瞄線 線段樹
問題描述 小明的家旁邊有條河流,但最近,周圍的三個工廠開始向這條河排放汙水,這條河的一部分被汙染了,被乙個工廠汙染的部分可以看做乙個矩形,現在小明想知道這條河被汙染的面積是多少。輸入 第一行乙個整數t,表示有多少組資料,之後每一組資料報括三行,每一行有lx,ly,rx,ry四個整數,表示被乙個工廠汙...