分塊 二分維護,求區間內數字出現的次數

2021-07-08 09:51:17 字數 575 閱讀 5804

如題,把區間分塊,對每個塊裡的數字排序,然後在塊裡二分查詢,複雜度理論是o(n^1.5*logn)

csy菊苣說把塊的大小調整為n*log2(n),複雜度可以降到o(n*sqrt(n*logn))

然後我寫了組大隨機資料測試了一下,如果分塊大小是sqrt(n)用了7.6s,分塊大小是n*log2(n)時只用了3.6s!!

效率提公升了非常多倍,感覺又是黑科技的節奏,收藏了

const int mx = 1e5 + 5;

struct data

};data a[mx];

int w, n;

void init()

}int solve(int l, int r, int x)

if(l == r) return ret;

for(int i = (r - 1) * w + 1; i <= min(r * w, n); i++)

data p; p.x = x;

for(int i = l + 1; i <= r - 1; i++)

return ret;

}

BZOJ2453 維護佇列(分塊)

傳送門 給乙個序列,每個位置對應乙個值,支援下面兩種操作 1.修改某個位置的值。2.詢問 l,r 區間內不同值的個數。1.考慮分塊 統計ans i j 表示第i塊到第j塊的個數,容易發現對於每個詢問,只需檢視完整塊的個數和不完整塊的影響。時間複雜度o n n 但修改會修改兩兩塊之間的ans i j ...

商店 分塊 二分

題目描述 從前有乙個奇怪的商店,一共售賣k種物品,第i種物品的初始 為i。但是這商店有個很奇怪的規矩,就是你每次購買一樣物品之後,這種物品的 都會在當前基礎上翻一倍。現在我們想要用最少的錢從裡面買n樣物品,不限購買的物品種數和每種物品購買的次數,請求出若這樣做,所買到的最貴的物品的 由於這個數字可能...

專案二 維護與管理Linux系統

任務六 管理linux系統的檔案許可權 第1步 認識檔案許可權說明 執行 ls l 或 ls al 或 ll 命令顯示的結果如圖所示。第2步 使用 chmod 命令改變檔案或目錄的訪問許可權 在文字模式下,可執行 chmod 命令改變檔案和目錄的許可權。chmod 777 123.txt 把 123...