本義
有n堵牆,m只智障鳥,給出牆端點座標,鳥座標,牆一定是平行於座標軸,橫著或豎著,每只鳥都會選乙個離自己最近的牆撞過去,鳥一定是平行於座標軸飛行,只能橫著或豎著飛,問每堵牆被幾隻鳥撞過。
題目沒說的坑爹問題:
#include
#include
#include
using
namespace
std;
const
int maxn=200010;
struct bird
};bool bird_cmpx_g(bird a,bird b)
bool bird_cmpy_l(bird a,bird b)
struct wall
inline
bool mode()
};bool wall_cmpx_g(wall a,wall b)
bool wall_cmpy_g(wall a,wall b)
bool wall_cmpx_l(wall a,wall b)
bool wall_cmpy_l(wall a,wall b)
class segtree
void insert(int l,int r,int val,int id=1,int l=0,int r=n)
if(wid[id]!=-1)
wid[id*2]=wid[id*2+1]=wid[id];
insert(l,r,val,id*2,l,(l+r)/2);
insert(l,r,val,id*2+1,(l+r)/2+1,r);
if(wid[id*2]==-1||wid[id*2+1]==-1||wid[id*2]!=wid[id*2+1])
wid[id]=-1;
}int query(int pos,int id=1,int l=0,int r=n)
};wall wall[maxn];
bird bird[maxn];
long
long mapx[maxn*3],mapy[maxn*3];
int x_cnt,y_cnt;
long
long dis[maxn];
int ans[maxn],hitid[maxn];
segtree st;
int segtree::n;
int main()
for(int i=1;i<=m;i++)
memset(dis,0x7f,sizeof dis);
//排序,離散化牆,鳥的座標
sort(mapx,mapx+x_cnt);
sort(mapy,mapy+y_cnt);
for(int i=1;i<=n;i++)
for(int i=1;i<=m;i++)
int wid,bid;
//設定牆同一直線總是座標小的在前,方便排序
for(int i=1;i<=n;i++)
//初始化,按x從小到大排序
wid=bid=1;
st.init(3*n);
sort(wall+1,wall+n+1,wall_cmpx_g);
sort(bird+1,bird+m+1,bird_cmpx_g);
//掃瞄線,從左到右,從下到上,鳥向左撞
while(wid<=n||bid<=m)
//更新鳥的答案
else
if(bid<=m)
}bid++;}}
//初始化,按y從小到大排序
wid=bid=1;
st.init(3*n);
sort(wall+1,wall+n+1,wall_cmpy_g);
sort(bird+1,bird+m+1,bird_cmpy_g);
//掃瞄線,從下到上,從左到右,鳥向下撞
while(wid<=n||bid<=m)
//更新鳥的答案
else
if(bid<=m)
}bid++;}}
//設定牆同一直線總是座標大的在前,方便排序
for(int i=1;i<=n;i++)
//更新鳥的答案
else
if(bid<=m)
}bid++;}}
//初始化,按y從大到小排序
wid=bid=1;
st.init(3*n);
sort(wall+1,wall+n+1,wall_cmpy_l);
sort(bird+1,bird+m+1,bird_cmpy_l);
//掃瞄線,從上到下,從右到左,鳥向下撞
while(wid<=n||bid<=m)
//更新鳥的答案
else
if(bid<=m)
}bid++;}}
//輸出
for(int i=1;i<=n;i++)
printf("%d\n",ans[i]);
return
0;}
POJ 3470 線段樹 掃瞄線法
大致題意 有n堵水平於座標軸的牆,以及m只小鳥,小鳥一定會朝離自己最近的牆飛去撞暈自己,且只能飛向平行於座標軸的 4個方向,撞到牆的邊緣也算合理衝撞 即是說可以往延長線飛 求各堵牆上各撞了幾隻小鳥。n,m 50000。題解 用線段樹維護牆的索引值,對應於小鳥的4個方向,分別在x,y軸上正向和反向掃瞄...
POJ 2155 樹套樹 線段樹套線段樹
matrix 樓教主出的題目。題意 乙個矩陣初始值都為0,每次給 c x1 y1 x2 y2 去反轉這個矩陣。或者 q x1 y1 查詢這個點是0 1。第一次接觸樹套樹的題目。一句ac 對於基本的線段樹,再在每個節點建乙個y方向上的線段樹。tree n m 這道題目更新的時候,對於x方向就是 x1,...
POJ 2155 二維線段樹 線段樹套線段樹
題目大意 二維區間裡,某個矩形裡都是01,選乙個矩形,裡面數字01翻轉。最後不停的問某個座標是0還是1.poj不支援c 1所以常用標頭檔案要注釋掉很多 大致二維線段樹就是這樣的了 每個節點都是乙個線段樹。qc大爺說二維線段樹不支援打標記。好像這題也不用打標記了,只能標記永久化 include inc...