CodeForces 103D 分塊處理

2022-08-31 03:48:10 字數 1112 閱讀 4665

題意:給定乙個長度為n的序列。然後q個詢問。每個詢問為(a,b),表示從序列第a項開始每b項的加和。

思路:2014集訓隊**中的《根號演算法——不只是分塊》中提到這題。 傳統的資料結構比較擅長處理連續區間的詢問。但是不擅長處理間隔位置的詢問。考慮到分塊。 對於b>sqrt(n)的詢問。我們暴力計算。可以發現b越大我們掃瞄的位置就會越小。最大掃瞄次數為o(n/sqrt(n))。然後對於b

#define _crt_secure_no_deprecate#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

intll;

const

int maxn = 3*100000 + 10

;int

block, n, q, a[maxn];

ll ans[maxn],sum[maxn];

struct query };

vector

d[maxn];

void

init()

if (i >block)

ans[d[i][j].id] =res;}}

else

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

}d[i].clear();

}}int

main()

scanf("%d

", &q);

for (int i = 1; i <= q; i++)

init();

for (int i = 1; i <= q; i++)

}//#ifdef local_time

//cout << "[finished in " << clock() - start << " ms]" << endl;

//#endif

return0;

}

CodeForces 732D 二分 貪心

思路 二分列舉答案,在限定時間內判斷這個時間能否完成。貪心策略是盡量晚的安排每個考試。ac include include include include include include include include include include include include include ...

CodeForces1311D 思維 二分

給你三個整數a,b,c 每一次操作你可以讓三個其中之一 1 或者 1,你可以執行無限次這樣的操作,但是你不能將他們變成非正數。你需要找到最小運算元以至於b是a的倍數,c是b的倍數。t組資料,1 t 100 每組三個數a,b,c。1 a b c 1e4 根據資料範圍,可以想到去列舉其中的乙個數,然後c...

Codeforces 1132D 二分答案 堆

傳送門 二分答案,考慮如何判定 可以用貪心的方法,每次找最快沒電的電腦,在沒電前1單位時間給它充電 正確性顯然 實現上可以維護乙個堆,儲存每個電腦電用完的時刻,每次從堆頂取出最小的乙個給它充電。設二分值為mid,對於每個電腦記錄它的充電次數num i 則沒電的時間就是 lfloor frac rfl...