P3792 由乃與大母神原型和偶像崇拜

2021-10-10 09:51:14 字數 2153 閱讀 3015

題意: 給你n個數, q次詢問, 每次詢問 有

題解:如果這題不帶修改,很多人都會想到,直接用主席樹維護乙個最大值最小值, 然後查詢區間不同數的個數, 如果不同數的個數等於maxn - minn + 1 那麼這個區間一定合法。

主席樹比較麻煩?

那就用線段樹維護乙個最大乙個最小值, 乙個這個數第一出現的位置的最小值。

如果 maxn - minn == r - l 且 min_pos > r那麼一定是個合法的區間。

但是這題帶修改怎麼辦呢?

有一種非常的巧妙的想法, 類似有hash

可以線段樹維護乙個區間和, 區間異或和, 區間乘積, 區間最大值, 區間最小值。

如果maxn - minn == r - l

在判斷區間和, 區間異或和, 區間乘積是否都和連續的值相等, 如果相等這個區間大概率符合。

維護的東西越多, 錯誤率就越低。

但是這題卡空間, 因為修改操作都是小於n的所有 沒用修改的直接用上面的線段樹方法查詢答案, 之前修改過了

在用這個hash的方法解決這個問題。

#includeusing namespace std;

typedef long long ll;

const int n = 5e5 + 7;

const ll mod = 1e9 + 7;

struct segment

}tree[4 * n];

#define m (l + r) / 2

#define lson 2 * node

#define rson 2 * node + 1

int a[n];

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

build(l, m, lson);

build(m + 1, r, rson);

tree[node] = tree[lson] + tree[rson];

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

segment ans;

ans.maxn = 0, ans.minn = int_max, ans.mul = 1, ans.o = 0, ans.sum = 0;

ans.min_pos = 1000000000, ans.ok = 0;

if (ql <= m)

if (qr > m)

return ans;

}void update(int v, int pos, int l, int r, int node)

if (pos <= m) update(v, pos, l, m, lson);

else update(v, pos ,m + 1, r, rson);

tree[node].min_pos = min(tree[lson].min_pos, tree[rson].min_pos);

}void up(int v, int pos, int l, int r, int node)

if (pos <= m) up(v, pos, l, m, lson);

else up(v, pos, m + 1, r, rson);

tree[node] = tree[lson] + tree[rson];

}int vis[25000007];

long long sum[2 * n], cnt[2 * n], mul[2 * n];

ll ksm(ll x, ll y)

x = x * x % mod;

y = y / 2;

}return base;

}inline int read()

while(ch>='0'&&ch<='9')

return x*f;

}int main()

mul[0] = 1;

for (int i = 1; i < 2 * n; i++)

build(1, n, 1);

for (int i = n; i; i--) else

vis[a[i]] = i;

}while (q--) else else

} else

} else else }}

}}

P3792 由乃與大母神原型和偶像崇拜

給你乙個序列a 每次兩個操作 1.修改x位置的值為y 2.查詢區間l,r是否可以重排為值域上連續的一段 輸入格式 第一行兩個數n,m 第二行n個數表示a i 後面m行每行三個數opt x y,或者opt l r,代表操作 輸出格式 如果可以,輸出 damushen 否則輸出 yuanxing 輸入樣...

luogu P3792 由乃與大母神原型和偶像崇拜

無 n nn個數,若干組詢問,每一次詢問 l,r l,r l,r 中是否經過排序可以形成值域嚴格上公升的序列。顯然用分塊的思想 記錄上乙個和當前相等的數是否在當前塊外 很容易實現,參見hh的項鍊 有些類似,好像不是一回事,但我找不到之前做的這樣的題了 但時間複雜度卻承受不了。於是想到了線段樹來維護,...

luogu P3792 由乃與大母神原型和偶像崇拜

題面傳送門 可以算一道線段樹維護hash的模板題了吧。hash要滿足兩個條件 相同的數hash值一定一樣與hash衝突盡量少。這道題hash序列可以用冪次方來hash 然後用線段樹隨便維護一下就好了。實現 include include define max a,b a b a b define m...