給定一些有座標的磁力塊,當距離滿足吸引距離且重量滿足吸引重量時可吸走該磁力塊,然後可以在新的磁力塊上擴充套件,也可以用原來的磁力塊,問最多能獲取幾個磁力塊
「我會平衡樹!」「滾!!!」
用平衡樹等樹形資料結構維護這些資料是很麻煩的,所以我們可以用分塊
因為該解滿足最優性,所以我們可以直接用寬搜擴充套件,中間利用分塊計算是否能銜接
首先把塊的外部按照質量排序,在塊的內部按吸引距離排序,這樣就保證了在同一塊內,一定能吸引至少一塊上一塊中的磁力塊,若吸引的數量少於塊長,我們可以直接暴力列舉區間,這樣的複雜度最壞也是n−
−√n
,再加上寬搜,一共是
n1.5
n
1.5可以通過本題
#include
#include
#include
#include
#define n 250001
#define ll long long
using
namespace
std;int block,x0,y0,n,x,y,ans;
const
double eps=1e-6;
struct node
a[n];
inline
bool cmpm(node x,node y)
sort(a+1,a+1+n,cmpm);//塊的外部按照質量排序
for(register
int i=1;i<=block;i++)
for(register
int i=1;i<=block;i++) sort(a+l[i],a+r[i]+1,cmpd);//塊的內部按吸引距離排序
q.push(0);
while(q.size())}}
if(i<=block)//對於第k段,樸素掃瞄該段,把能吸引的磁石吸走,複雜度為根號n }}
printf("%d",ans);
}
整除分塊(數論分塊)
乙個有 趣的問題 求 sum n lfloor frac ni rfloor n leq 10 顯然不能直接做廢話 經過一番冷靜推理暴力打表 我們發現以下性質 1.large lfloor frac ni rfloor 最多只有 2 sqrt 種取值 證明 對於 i le sqrt,只有 sqrt ...
分塊 分塊練習三題
分塊嘛 馮巨道德午餐講過的 唯一不同的是可能需要st n ed n 來記錄一下範圍 例教主的魔法 板 include using namespace std define in read int in const int n 1e6 5 int n,q,a n b n add n int siz,m...
字串 CH Round 30 T1 語言識別
悲傷的故事,只得了20 原題 背景語言鑑別是一門藝術,不同的語言有不同的語法規則,每種語言都有自己的語法特徵。lll6924最近研究出了一種語言,這種語言的語法簡單明瞭,表達意思方便,只是難以鑑別,鑑別語言的最佳工具就是計算機了。描述這種語言的語法規則是 乙個完整的句子只由主語 謂語和賓語 按先後順...