線段樹 博弈 一道博弈題

2021-08-17 00:15:54 字數 2363 閱讀 8740

障礙點數和詢問點數都是1e5 座標範圍為1e9(實際資料既然有大於1e9的)

乙個點的下方或左邊存在必敗點,則為必勝點,否則為必敗點

同一行的障礙會把這一行分成很多段,段與段之間是互不影響的。

考慮同一段的點,若其中乙個點為必敗點,則之後的點一定是必勝點,也就是說要找到第乙個必敗點

但是有很多行,直接列舉會t

乙個空行會把第乙個沒有必敗點的位置變成有必敗點

如果有

x x

行連續的空行,則就是把前

x' role="presentation">x

x個沒有必敗點的位置變成有必敗點

#include 

#include

#include

#include

#include

#include

#include

#define all(x) (x).begin(),(x).end()

#define fi first

#define se second

using

namespace

std;

typedef pair pii;

const

int n=600010,max=1e9+5e7;

inline

char nc()

inline

void read(int &x)

int t,n,q;

vector

sb,za[n];

vector

qy[n];

pii b[n],q[n];

int tag[n*50],tot[n*50],ls[n*50],rs[n*50],cnt,rt,ans[n],ll[n*50],rr[n*50];

void cl(int &g,int l,int r)

void push(int g)

}void up(int g)

void set0(int &g,int x,int l,int r)

void set1(int &g,int l,int r,int l,int r)

int query(int g,int l,int r,int l,int r)

if(r<=mid) return query(ls[g],l,r,l,mid);

else

if(l>mid) return query(rs[g],l,r,mid+1,r);

int ret=query(ls[g],l,mid,l,mid);

if(~ret) return ret;

return query(rs[g],mid+1,r,mid+1,r);

}int find(int x)

}int main()

read(q);

for(int i=1;i<=q;i++)

read(q[i].fi),read(q[i].se),sb.push_back(q[i].fi);

sort(all(sb)); sb.erase(unique(all(sb)),sb.end());

for(int i=1;i<=n;i++)

for(int i=1;i<=q;i++)

for(int x=0;x1); za[x].push_back(max+1);

sort(all(za[x])); sort(all(qy[x]));

vector

fail;

for(int i=0;i1;i++)

if(za[x][i]+1

1]) }

for(int i=0;iif(!fail.size() || qy[x][i].fi>*fail.rbegin())

ans[qy[x][i].se]=1;

else

ans[qy[x][i].se]=*lower_bound(all(fail),qy[x][i].fi)!=qy[x][i].fi;

}for(int i=1;i1;i++) set0(rt,za[x][i],0,max);

if(x+1

int pos=find(sb[x+1]-sb[x]-1);

if(~pos) set1(rt,0,pos,0,max);}}

for(int i=1;i<=q;i++)

for(int i=0;ifor(int i=1;i<=cnt;i++) ls[i]=rs[i]=tag[i]=0; cnt=rt=0;

sb.clear();

} return

0;}

再來一道線段樹的題。

b 單點更新2 time limit 3000msmemory limit 32768kb64bit io format i64d i64u submit status description 很多學校流行一種比較的習慣。老師們很喜歡詢問,從某某到某某當中,分數最高的是多少。這讓很多學生很反感。不管...

一天一道演算法題 線段樹

題目 模板 線段樹1 rmq問題 range minimum maximum query 和求區間和的問題可以用暴力法做,時間複雜度為o n 2 用在本題會超時,所以我們選擇線段樹做。線段樹是一種用於區間操作的資料結構,用二叉樹構造。如圖。線段樹的每個節點代表了乙個區間。防止超時,用了lazy標記。...

每週一道資料結構(四)A 演算法 博弈樹 剪枝

前陣子考試學了a 演算法 博弈樹和回溯,自己真是愚蠢至極,根本沒就搞明白這些,所以對於這些演算法問道的話就不能說清楚,也記不住,所以才有了這篇筆記。在這裡感謝面試我的那位工程師 啟發式資訊 用於幫助減少搜尋量的與問題有關的資訊或知識。啟發式搜尋 使用啟發資訊指導的搜尋過程叫做啟發式搜尋。估價函式 定...