多校賽第7場 hdu5820 Lights 主席樹

2021-07-16 10:14:56 字數 1380 閱讀 8108

比賽時候卡在乙個構造題上了,結束改了一行1a,心痛。。

沒有時間看別的題,這是個很嚴重的問題。。

乙個50000x50000的網格,上面有500000個紅綠燈(整點),問這些紅綠燈兩兩之間是否都有一條這樣的路,使得路上每個轉彎點都有交通燈。

題解上感覺寫的有點問題。

對於每個交通燈,找到距離它最近的上下左的交通燈(若沒有則視為邊界有),由這四個點可以構成乙個矩形。

這個矩形有乙個特點:矩形邊界的點符合條件,而矩形內部的點則到前面選的那個點不存在那條路。

所以問題轉化為了,看那個矩形內部是否有點。點範圍很小,不需要離散化,直接用主席樹維護,主席樹t[y]維護,對於前y列,x座標在[x1

,x2 ]中點的數目。

那麼矩形內部點數為:

query(t[y2-1],x1,x2 ) - query(t[y1],x1,x2)

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int n = 50000;

namespace pst

int build(int l = 1,int r = n)

return root;

}int update(int root,int pos,int val)

else

c[newroot] = c[root] + val;

}return tmp;

}int query(int root, int l, int r, int s = 1, int t = n)

}const

int size = pst::maxn;

vector

b[size];

int lef[size];

int init()

pst::init(n);

pst::t[0] = pst::build();

memset(lef, 0, sizeof(lef));

}bool solve()

for(int j = 0; j < b[i].size(); j++)

}return

true;

}int main()

init();

printf("%s\n",solve()?"yes":"no");

}}

hdu多校賽第7場1011Kejin Player

題庫6656 題意不再詳講,一開始以為是算期望的一道題,結果發現想錯了 和本題相關的演算法有 輸入輸出外掛程式 適用於大量輸入輸出,加快速度 費馬小定理求逆元 字首和 輸入輸出外掛程式模板 int scan void out int a if a 10 out a 10 putchar a 10 0...

2019HDU多校第7場 構造

假設現在你在準備考試,明天的考試有 n 道題目,對於分值為 i 的題目至少複習 i 1 小時才能做對,已知總分為 m 求確保完成 k 道題的最少時間。手動嘗試一下,發現答案都是 aabbbb 這樣的形式。例如,5 18 3 rightarrow 6 6 7 7 7,5 19 3 rightarrow...

hdu 多校賽 第八場

首先確定答案不會太大,寫個狀壓跑一跑,能跑出所有答案 或者直接oeis include define ll long long define sc scanf define pr printf using namespace std ll a1 84 ll a2 14 ll a3 36 ll a4 ...