題意:給定乙個長度為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...