bzoj4373 算術天才 與等差數列

2022-05-16 10:10:26 字數 2091 閱讀 5565

bzoj4373 算術天才⑨與等差數列

給定乙個長為 \(n\) 的序列 \(a_i\) ,有 \(m\) 次操作:

\(n,\ m\leq3\times10^5,\ 0\leq a_i,\ k\leq10^9\)

線段樹,hash

區間 \([l,\ r]\) 所組成的等差數列首項為 \(\min}\) ,末項為 \(\max}\) ,公差為 \(k\)

可以考慮求出 \([l,\ r]\) 和這個等差數列的hash值,接著對比即可

如果將區間和作為hash值,衝突率很高,可以考慮用每個數的平方作為hash值

設該等差數列首項為 \(l\) ,公差為 \(k\) ,項數為 \(t\)

則它的hash值為 $$\displaystyle\sum_t$$

接著大力化式子

\[\beginhash&=\displaystyle\sum_^t\\&=(t+1)l^2+k\displaystyle\sum_^t\\&=(t+1)l^2+k(\displaystyle\sum_^t+2l\sum_^ta)\\&=(t+1)l^2+k(\frac+lt(t+1))\end

\]故可 \(o(1)\) 求出

此題還需要特判 \(l=r\) 及 \(k=0\) 的情況

由於我擔心被卡,用了雙模數,常數稍大 qaq

然而維護平方可以卡掉t_t,貌似維護三次方就吼辣?但式子化起來太麻煩了qaq

upd:維護任意次方都會被卡,但是比如說維護二十幾次方就沒人會卡你,但化式子太麻煩了

時間複雜度 \(o(n\log n)\)

#include using namespace std;

#define mid ((l + r) >> 1)

#define lson k << 1, l, mid

#define rson k << 1 | 1, mid + 1, r

const int maxn = 3e5 + 10, p1 = 1e9 + 7, p2 = 1e9 + 9, inv1 = 166666668, inv2 = 833333341;

int n, m, lastans;

struct node

} tree[maxn << 2];

inline node operator + (node a, node b)

void build(int k, int l, int r)

build(lson), build(rson);

tree[k] = tree[k << 1] + tree[k << 1 | 1];

}void upd(int k, int l, int r, int x, int v)

if (x <= mid) else

tree[k] = tree[k << 1] + tree[k << 1 | 1];

}node query(int k, int l, int r, int ql, int qr)

node res;

if (ql <= mid) res = query(lson, ql, qr);

if (qr > mid) res = res + query(rson, ql, qr);

return res;

}inline int getsum(int l, int k, int t, int p, int inv)

inline int getsum1(int l, int r, int k)

inline int getsum2(int l, int r, int k)

inline int reget(int x)

int main()

y = reget(y);

if (x > y) swap(x, y);

bool ans;

scanf("%d", &k);

k ^= lastans;

if (x == y) else

ans ? lastans++, puts("yes") : puts("no");

} return 0;

}

BZOJ4373算術天才 與等差數列 線段樹

分類 data structure bzoj4373算術天才 與等差數列 算術天才 非常喜歡和等差數列玩耍。有一天,他給了你乙個長度為n的序列,其中第i個數為a i 他想考考你,每次他會給出詢問l,r,k,問區間 l,r 內的數從小到大排序後能否形成公差為k的等差數列。當然,他還會不斷修改其中的某一...

bzoj 4912 Sdoi2017 天才黑客

這個題和點沒什麼關係 之和邊與邊之間關係有關 我們就把邊看作點 邊權就是 lcp 點權看作這條邊本來的權值.現在考慮兩兩連邊 lcp 就是兩個點在 trie 樹上的 lca 的深度.這樣連邊是 o m 2 的 考慮優化 我們把乙個點的出邊和入邊都單獨拿出來 並按照 dfs 序排序 設排序之後的陣列為...

bzoj3600 沒有人的算術

time limit 20 sec memory limit 128 mb submit 1118 solved 452 submit status discuss 湖北省隊互測 week1 submit status discuss 神。神題。具體過程太抽象了。我們考慮如果能有一種方法能快速得到排...