日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【线段树 集合hash】bzoj4373: 算术天才⑨与等差数列

發布時間:2023/12/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【线段树 集合hash】bzoj4373: 算术天才⑨与等差数列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

hash大法好(@ARZhu);大數相乘及時取模真的是件麻煩事情

Description

算術天才⑨非常喜歡和等差數列玩耍。
有一天,他給了你一個長度為n的序列,其中第i個數為a[i]。
他想考考你,每次他會給出詢問l,r,k,問區間[l,r]內的數從小到大排序后能否形成公差為k的等差數列。
當然,他還會不斷修改其中的某一項。
為了不被他鄙視,你必須要快速并正確地回答完所有問題。
注意:只有一個數的數列也是等差數列。

Input

第一行包含兩個正整數n,m(1<=n,m<=300000),分別表示序列的長度和操作的次數。
第二行包含n個整數,依次表示序列中的每個數a[i](0<=a[i]<=10^9)。
接下來m行,每行一開始為一個數op,
若op=1,則接下來兩個整數x,y(1<=x<=n,0<=y<=10^9),表示把a[x]修改為y。
若op=2,則接下來三個整數l,r,k(1<=l<=r<=n,0<=k<=10^9),表示一個詢問。
在本題中,x,y,l,r,k都是經過加密的,都需要異或你之前輸出的Yes的個數來進行解密。

Output

輸出若干行,對于每個詢問,如果可以形成等差數列,那么輸出Yes,否則輸出No。

Sample Input

5 3
1 3 2 5 6
2 1 5 1
1 5 4
2 1 5 1

Sample Output

No
Yes

題目分析

動態詢問區間是否為「等差數列」。出題人用線段樹維護了區間最小;區間gcd;區間……等等一系列標記。

然而HZQ給出了一個吊打出題人的做法:線段樹hash。

注意到詢問的區間可以視作集合形式,與順序無關。于是便可以快速地集合hash。

具體來說用線段樹維護區間最小值(用于尋找等差數列首項);區間立方和(由費馬大定理得立方和不容易被卡;不過在這題出題人并沒有惡意卡平方哈希)

問題就在于如何快速驗證;換句話說就是計算詢問的等差數列的hash值$x^3+(x+k)^3+(x+2*k)^3+...+(x+(n-1)*k)^3$其中$n$為序列長度

把式子按照指數展開,就可以愉快地$O(1)$計算數列答案了。我才沒有暴力展開算了1h什么都沒算出來

?

1 #include<bits/stdc++.h> 2 typedef long long ll; 3 const ll MO = 1e9+7; 4 const int INF = 2e9; 5 const int maxn = 300035; 6 7 int n,m,preans; 8 ll mn[maxn<<2],f[maxn<<2]; 9 10 int read() 11 { 12 char ch = getchar(); 13 int num = 0; 14 bool fl = 0; 15 for (; !isdigit(ch); ch = getchar()) 16 if (ch=='-') fl = 1; 17 for (; isdigit(ch); ch = getchar()) 18 num = (num<<1)+(num<<3)+ch-48; 19 if (fl) num = -num; 20 return num; 21 } 22 ll qmi(ll a, ll b) 23 { 24 ll ret = 1; 25 while (b) 26 { 27 if (b&1) ret = ret*a%MO; 28 a = a*a%MO, b >>= 1; 29 } 30 return ret; 31 } 32 void pushup(int rt) 33 { 34 mn[rt] = std::min(mn[rt<<1], mn[rt<<1|1]); 35 f[rt] = (f[rt<<1]+f[rt<<1|1])%MO; 36 } 37 void build(int rt, int l, int r) 38 { 39 mn[rt] = INF; 40 if (l==r){ 41 mn[rt] = f[rt] = read(); 42 f[rt] = 1ll*f[rt]*f[rt]%MO*f[rt]%MO; 43 return; 44 } 45 int mid = (l+r)>>1; 46 build(rt<<1, l, mid), build(rt<<1|1, mid+1, r); 47 pushup(rt); 48 } 49 void update(int rt, int l, int r, int pos, ll c) 50 { 51 if (l==r){ 52 f[rt] = c*c%MO*c%MO, mn[rt] = c; 53 return; 54 } 55 int mid = (l+r)>>1; 56 if (pos <= mid) update(rt<<1, l, mid, pos, c); 57 else update(rt<<1|1, mid+1, r, pos, c); 58 pushup(rt); 59 } 60 int queryMn(int rt, int L, int R, int l, int r) 61 { 62 if (L <= l&&r <= R) return mn[rt]; 63 int mid = (l+r)>>1, ret = INF; 64 if (L <= mid) 65 ret = queryMn(rt<<1, L, R, l, mid); 66 if (R > mid) ret = std::min(ret, queryMn(rt<<1|1, L, R, mid+1, r)); 67 return ret; 68 } 69 ll query(int rt, int L, int R, int l, int r) 70 { 71 if (L <= l&&r <= R) return f[rt]%MO; 72 int mid = (l+r)>>1; 73 ll ret = 0; 74 if (L <= mid) ret = query(rt<<1, L, R, l, mid); 75 if (R > mid) ret += query(rt<<1|1, L, R, mid+1, r); 76 return ret%MO; 77 } 78 ll calc(ll x, ll n, ll k) 79 { 80 ll ret = n*x%MO*x%MO*x%MO, pos = 1ll*n*(n-1)%MO*qmi(2, MO-2)%MO; 81 ret += ((k*k%MO*k%MO*pos%MO*pos%MO+3*k%MO*x%MO*x%MO*pos%MO)%MO+k*x%MO*k%MO*(2*n-1)%MO*pos%MO)%MO; 82 return ret%MO;          //時刻記得要取模! 83 } 84 int main() 85 { 86 // freopen("4373.in","r",stdin); 87 // freopen("4373.out","w",stdout); 88 n = read(), m = read(); 89 build(1, 1, n); 90 for (int i=1; i<=m; i++) 91 { 92 int opt = read(); 93 if (opt==1){ 94 int x = read()^preans, y = read()^preans; 95 update(1, 1, n, x, y); 96 }else{ 97 int l = read()^preans, r = read()^preans, k = read()^preans, lens = (r-l+1); 98 int st = queryMn(1, l, r, 1, n); 99 ll sum = query(1, l, r, 1, n); 100 if (calc(st, lens, k)==sum) preans++, puts("Yes"); 101 else puts("No"); 102 } 103 } 104 return 0; 105 }

?

?

?

?

END

轉載于:https://www.cnblogs.com/antiquality/p/9364412.html

總結

以上是生活随笔為你收集整理的【线段树 集合hash】bzoj4373: 算术天才⑨与等差数列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 大奶一区 | 国产18在线观看 | 黄色不卡| 大肉大捧一进一出好爽视频 | 国模私拍在线观看 | 99九九久久 | 很黄很污的视频网站 | 久久久久久久影视 | 女女互磨互喷水高潮les呻吟 | 国产网址在线 | 永久免费观看av | 丝袜老师办公室里做好紧好爽 | 一出一进一爽一粗一大视频 | 欧美18免费视频 | 亚洲毛片儿 | 亚洲欧美日韩一区二区 | 在线亚洲天堂 | 雷电将军和丘丘人繁衍后代视频 | 日日摸夜夜添狠狠添久久精品成人 | 亚洲精品一区二区三区四区乱码 | 亚洲天堂自拍偷拍 | 日韩成人av在线播放 | 久久久国产一区二区 | 日本视频在线免费观看 | 99er这里只有精品 | av片在线观看免费 | 欧美成人精品一区二区男人小说 | 欧美一区二区视频免费观看 | caopeng视频| 亚洲熟妇国产熟妇肥婆 | 日本三级少妇 | 久久久亚洲精品视频 | 黄页网址大全免费观看 | 久久精品男人的天堂 | 青草福利视频 | 亚洲综合精品国产一区二区三区 | 老牛影视少妇在线观看 | 黄页视频在线观看 | 成人av免费网址 | 精品欧美在线观看 | 亚洲熟妇无码久久精品 | 精品一区二区国产 | a毛片基地 | 一本一本久久a久久精品综合麻豆 | 麻豆国产尤物av尤物在线观看 | 先锋影音男人 | 亚洲综合一区二区三区 | 天天干,天天操,天天射 | 朴银狐电影中文在线看 | 欧美春色| 婷婷综合精品 | 亚洲50p| 无套暴操 | h在线 | 三级全黄视频 | 日韩国产免费 | 麻豆系列在线观看 | 老子影院午夜伦不卡大全 | 日韩视频一区二区三区在线播放免费观看 | 91肉色超薄丝袜脚交一区二区 | 快播91 | 国产精品粉嫩 | 日韩和欧美的一区二区 | 自拍偷拍第2页 | 免费特级黄毛片 | 乌克兰少妇性做爰 | 99av国产精品欲麻豆 | 日本在线网址 | 欧美成片vs欧美 | 国产福利在线观看 | 看全色黄大色黄大片女一次牛 | 欧美日韩综合在线观看 | 国产精品久久网站 | 亚洲 欧美 激情 小说 另类 | 亚洲性免费 | 熟女少妇在线视频播放 | 中文一区二区在线观看 | 国产视频一区二区三区在线 | 免费毛片网站 | 国产精品美女自拍视频 | 91福利网 | 91插插插插插 | 国产精品一区二区小说 | 国产aⅴ精品 | 99热精品在线播放 | 免费a级网站 | 日本欧美日韩 | 美国av大片 | 欧美黑人巨大xxx极品 | 欧美一级欧美三级 | 人妻偷人精品一区二区三区 | 非洲一级片| 天堂va蜜桃一区二区三区漫画版 | 香蕉久久av一区二区三区 | 精品一区视频 | 少妇h视频 | jizz中国女人高潮 | 亚洲欧美激情图片 | 九九免费精品视频 |