HNOI 2010 彈飛綿羊 分塊

2021-07-30 03:42:49 字數 1109 閱讀 3870

這題以前是用lct寫的,然後某考試中發現分塊**妙,要去學習,

首先來水一水題

我以前的lct

思路

把彈簧分塊,然後維護兩個資訊:

1.走出當前分塊需要幾步;

2.走出當前分塊後到了哪個點。

於是修改彈簧x的時候就把本塊中的起始位置到x重算一遍,

查詢彈簧x的時候就按第二個資訊一直跳,一次跳出乙個分塊,每次加上第乙個資訊即可 效率o

((n+

m)n‾

√2)

感想

分塊**好,分塊**短,分快**妙

**

#include

#include

#include

#include

#include

#include

#define for(i, a, b) for(int i = (a); i <= (int)(b); ++i)

#define forr(i, a, b) for(int i = (a); i >= (int)(b); --i)

#define n (200000+5)

#define sn (500+5)

using

namespace

std;

int n, siz, jump[n], bnum[n], blo[sn][sn];

int tot[n], pos[n];

void insert(int nc, int now)

++tot[id]; pos[id] = now+jump[now];

}void modify(int nc, int now)

int query(int now)

return ans;

}int main()

forr(i, n, 1) insert(bnum[i], i);

scanf("%d", &m);

int op, x, y;

while(m--)

}return

0;}

HNOI2010 彈飛綿羊 題解(分塊)

前言 其實這個題是用lct做的,但蒟蒻因為太弱了,只會分塊qaq。題目鏈結 題目大意 給定 n 個裝置,每個裝置有彈力係數 k i 即在這個位置上會被彈到 i k i 現在有兩個操作 1.修改某個彈力裝置的彈力係數。2.問從 x 開始,彈幾次後所處位置大於 n 預處理在每個點需要被彈飛的次數 sum...

hnoi2010 彈飛綿羊

題目描述很明確,現在的目標是均攤兩個操作的複雜度 現在我們已知有兩種方法 1.每次用o 1 的時間修改k值,用o n 的時間直接模擬回答詢問 2.每次修改了k值後用o n 的時間更新所有答案,o 1 時間回答 均攤這兩種操作,可以這樣做 由於只可以從前往後跳,所以可以把跳躍路徑壓縮,更新時把壓縮的部...

HNOI 2010 彈飛綿羊

要求維護乙個 n 個節點的森林,實現 m個詢問,其中包括 n 200,000m 100,000 動態樹的入門題。只需要實現ac cess 操作以及維護子樹大小si ze即可。其實我做這道題是為了找找寫動態樹的感覺,發現了不少要注意的細節。總結地說,越是基本的函式就越不能打錯,不然就要花好多的時間去查...