Jzoj5234 外星人的路徑

2022-05-09 15:31:50 字數 1347 閱讀 7841

有乙個外星人控制了你的大腦。一開始你處於原點(0,0)。外星人有乙個由(r,u,d,l)組成的長度為m 的操作序列,分別代表(右,上,下,左)。

平面上有n 個關鍵點,每當外星人給出乙個操作,你需要在這個方向上找到最近的乙個關鍵點,並走到那個點上。保證輸入資料合法。

100%的資料,n,m≤100000,xi,yi≤200000。

這樣,我們搞2個權值線段樹,乙個存橫座標乙個存縱座標,每次查詢當前座標的前繼或者後續即可

複雜度o(mlgn)

#include

#include

#include

#define m 200010

#define ls s[x].l

#define rs s[x].r

using

namespace

std;

struct nod;

struct tree;

memset(rt,0,sizeof rt);

} inline

int newnode()

void ps(int x)

void insert(int l,int r,int& x,int p)

int m=l+r>>1;

if(p<=m) insert(l,m,ls,p);

else insert(m+1,r,rs,p);

ps(x);

} int getmax(int l,int r,int x)

else

} return l;

} int getmin(int l,int r,int x)

else

} return l;

} int getpre(int l,int r,int x,int p)

int getsuc(int l,int r,int x,int p)

void insert(int x,int y)

int pre(int x,int y)

int suc(int x,int y)

} rot,lin;

int n,m,x,y; char s[100010];

int main()

x=y=m; scanf("%s",s);

for(int i=0;iif(s[i]=='u') y=rot.suc(x,y);

if(s[i]=='d') y=rot.pre(x,y);

if(s[i]=='l') x=lin.pre(y,x);

if(s[i]=='r') x=lin.suc(y,x);

} printf("%d %d\n",x-m,y-m);

}

外星人的供給站

外星人指的是地球以外的智慧型生命。外星人長的是不是 與地球上的人一樣 並不重要,但起碼應該符合我們目前對生命基本形式的認識。比如,我們所知的任何生命都離不開液態水,並且都是基於化學元素碳 c 的有機分子組合成的複雜有機體。42 歲的天文學家 dr.kong 已經執著地觀測 zdm 777 星球十多年...

外星人的語言(進製轉換)

時間限制 1000 ms 記憶體限制 32768 kb 長度限制 100 kb 判斷程式 standard 來自 小小 nowcoder費了很大勁,終於和地外文明聯絡上。我們地球人通常有10根手指,因此我們習慣用10進製的數,而外星人的手指有16跟 8根等不等的數目,因此他們使用與我們不同的進製。為...

NYOJ 題目710 外星人的供給站

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 外星人指的是地球以外的智慧型生命。外星人長的是不是與地球上的人一樣並不重要,但起碼應該符合我們目前對生命基本形式的認識。比如,我們所知的任何生命都離不開液態水,並且都是基於化學元素碳 c 的有機分子組合成的複雜有機體。42歲的天...