分塊 CH Round 46 磁力塊

2021-08-25 11:56:32 字數 1005 閱讀 2983

給定一些有座標的磁力塊,當距離滿足吸引距離且重量滿足吸引重量時可吸走該磁力塊,然後可以在新的磁力塊上擴充套件,也可以用原來的磁力塊,問最多能獲取幾個磁力塊

「我會平衡樹!」「滾!!!」

用平衡樹等樹形資料結構維護這些資料是很麻煩的,所以我們可以用分塊

因為該解滿足最優性,所以我們可以直接用寬搜擴充套件,中間利用分塊計算是否能銜接

首先把塊的外部按照質量排序,在塊的內部按吸引距離排序,這樣就保證了在同一塊內,一定能吸引至少一塊上一塊中的磁力塊,若吸引的數量少於塊長,我們可以直接暴力列舉區間,這樣的複雜度最壞也是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最近研究出了一種語言,這種語言的語法簡單明瞭,表達意思方便,只是難以鑑別,鑑別語言的最佳工具就是計算機了。描述這種語言的語法規則是 乙個完整的句子只由主語 謂語和賓語 按先後順...