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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【无码专区13】最小公倍数(线段树)

發(fā)布時間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【无码专区13】最小公倍数(线段树) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

因為只有std,沒有自我實現(xiàn),所以是無碼專區(qū)

主要是為了訓(xùn)練思維能力

my idea顧名思義,記錄了我的整個思維過程,以及自己部分實現(xiàn)細(xì)節(jié)口胡,還有期望分?jǐn)?shù)

solution才是dls正解,但是因為只有潦草幾句,所以大部分會有我自己基于正解上面的算法實現(xiàn)過程,可能選擇的算法跟std中dls的實現(xiàn)不太一樣。

std可能也會帶有博主自己的注釋。


problem

nnn 個數(shù),其表示為 2ai?3bi2^{a_i}·3^{b_i}2ai??3bi?,給定 ai,bia_i,b_iai?,bi?

對于所有的非空子集,求出它們的最小公倍數(shù),并求和。

答案對 1e9+71e9+71e9+7 取模。

測試點編號n≤n\lenai,bi≤a_i,b_i\leai?,bi?
1?21-21?220202010910^9109
3?43-43?410310^310310910^9109
5?65-65?610510^510510310^3103
7?107-107?1010510^510510910^9109

my idea

讀完題就直接思考具有特殊性質(zhì)的數(shù)據(jù)點,因為往往這種數(shù)據(jù)點的算法就是正解最樸素的原始樣子。有價值的題都會這么設(shè)計部分分。某些毒瘤題呃呃呃

n≤103n\le 10^3n103 應(yīng)該是與 n2n^2n2 掛鉤的算法。

大概是枚舉子集的最小值和最大值,強制入選,然后二維數(shù)點中間所有可以選擇的數(shù)。為了避免算重,相同值的點還得強制規(guī)定一個大小,比如編號。

ai,bi≤103a_i,b_i\le 10^3ai?,bi?103 本質(zhì)上與上面差不多。

只不過是從因子的冪次角度入手枚舉。

枚舉最大值的 a,ba,ba,b,二維數(shù)點所有 ai≤a,bi≤ba_i\le a,b_i\le bai?a,bi?b 的點,考慮是否選擇。

同樣為了避免算重,也得規(guī)定第三排序法則。

以上只是粗略的想法,并未細(xì)想。因為這個時候發(fā)現(xiàn)上面的做法其實是可以做正解的。

2a,3b2^a,3^b2a,3b 是相互獨立的,可分開計算。

將所有數(shù)按 aaa 冪次大小升序排序后。

考慮枚舉第 iii 個數(shù)的 aaa 作為最小公倍數(shù)的 aaa

顯然,子集內(nèi)的其余元素只能從 1≤j<i1\le j<i1j<i 里面選。

bbb 建立權(quán)值線段樹,維護(hù)元素個數(shù)。

為了去重,強制枚舉的數(shù)必選,那么最小公倍數(shù) bbb 的至少是 bib_ibi?

直接線段樹上查一段區(qū)間作為作為最小公倍數(shù) bbb 的答案。

具體而言:

線段樹的葉子節(jié)點 xxx 維護(hù)的是 bj≤x,1≤j<ib_j\le x,1\le j<ibj?x,1j<ijjj 的個數(shù),假設(shè)為 ccc 個。

一個葉子節(jié)點如果是最后選的子集數(shù)的最小公倍數(shù)的 bbb 的話。

那么可能的子集為 2c?12^{c-1}2c?1 個,?1-1?1 是因為必須要求 bj=xb_j=xbj?=xjjj 中強制被選一個,這樣才會有 bjb_jbj?,否則會假掉。

一個點對答案的貢獻(xiàn)就是 2c?1?x2^{c-1}*x2c?1?x,此時必須保證有至少一個 bj=xb_j=xbj?=x 才行。

所以一個點還要維護(hù)一個標(biāo)記 fff,表示是否有至少一個 jjj 滿足 bj=xb_j=xbj?=x

那么一個點對答案的貢獻(xiàn)應(yīng)該是 2c?1?x?f2^{c-1}*x*f2c?1?x?f

對于枚舉的 iii 而言,算出來的貢獻(xiàn)為 2ai?2^{a_i}*2ai?? 線段樹查詢區(qū)間 [bj,MaxB][b_j,MaxB][bj?,MaxB]

注意到,這個形式意味著還要對 bbb 進(jìn)行離散化處理。

因為 iii 能讓 bib_ibi? 的線段樹對應(yīng)節(jié)點 f=1f=1f=1,而這之前可能是 f=0f=0f=0

所以要先修改再查詢。

修改根據(jù)節(jié)點維護(hù)信息,對應(yīng)的應(yīng)是區(qū)間修改 [1,bi][1,b_i][1,bi?],且特殊的, bib_ibi?fff 要置為 111

所以可以拆成區(qū)間修改 [1,bi)[1,b_i)[1,bi?) 和單點修改 bib_ibi?

懶標(biāo)記一旦增加,相當(dāng)于是多了一個個數(shù),冪次 +1+1+1,拆出來變成外部 ×2\times 2×2

2lazy?(2c1?x1?f1+2c2?x2?f2+...+)2^{lazy}·(2^{c_1}*x_1*f_1+2^{c_2}*x_2*f_2+...+)2lazy?(2c1??x1??f1?+2c2??x2??f2?+...+)

時間復(fù)雜度為 O(nlog?n)O(n\log n)O(nlogn)


solution

首先不妨設(shè) ai,bia_i,b_iai?,bi? 兩兩不同。

考慮枚舉集合中 bib_ibi? 最大的元素,將所有 bj<bib_j<b_ibj?<bi? 的元素按 aja_jaj? 從小到大排序。

不妨記作 a1′,a2′,...,ai?1′a_1',a_2',...,a_{i-1}'a1?,a2?,...,ai?1?,那么會有 2i?12^{i-1}2i?1 個子集,最大值是 ai?1′a_{i-1}'ai?1?

考慮將 aia_iai? 加入后,所有最大值 <ai<a_i<ai? 的子集,最大值都變成了 aia_iai?,剩下的子集不變。

aia_iai? 加入到上面的有序序列后,所有比 aia_iai? 大的元素排名都會 +1+1+1,對應(yīng)的子集個數(shù)會翻倍。

問題等價于區(qū)間乘 222 以及區(qū)間求和,線段樹維護(hù)。

就是my idea類似的思想,yeah我做出來了!


std

#include <bits/stdc++.h> #define ls(x) (x << 1) #define rs(x) ((x << 1) | 1) #define LL long long using namespace std; const int maxn = 100010; const LL mod = 1000000007;struct node {int x, y, rank; };bool cmp1(node x, node y) {return x.x == y.x ? x.y < y.y : x.x < y.x; }bool cmp2(node x, node y) {return x.y == y.y ? x.x < y.x : x.y < y.y; } node a[maxn];struct SegementTree {LL sum, cnt, lz; }; SegementTree tr[maxn * 4];LL qpow(LL x, LL y) {LL ans = 1;for (; y; y >>= 1) {if (y & 1)ans = (ans * x) % mod;x = (x * x) % mod;}return ans; }void pushup(int x) {tr[x].sum = (tr[ls(x)].sum + tr[rs(x)].sum) % mod;tr[x].cnt = (tr[ls(x)].cnt + tr[rs(x)].cnt) % mod; }void maintain(int x, int y) {tr[x].sum = (tr[x].sum * qpow(2, y)) % mod;tr[x].lz += y; }void pushdown(int x) {if (tr[x].lz) {if (tr[ls(x)].cnt)maintain(ls(x), tr[x].lz);if (tr[rs(x)].cnt)maintain(rs(x), tr[x].lz);tr[x].lz = 0;} }void build(int x, int l, int r) {if (l == r) {tr[x].sum = tr[x].cnt = 0;return;}int mid = (l + r) >> 1;build(ls(x), l, mid);build(rs(x), mid + 1, r);pushup(x); }void update_cnt(int x, int l, int r, int pos, int y, int z) {if (l == r) {tr[x].cnt = 1;tr[x].sum = (qpow(2, y) * qpow(2, z)) % mod;return;}pushdown(x);int mid = (l + r) >> 1;if (pos <= mid)update_cnt(ls(x), l, mid, pos, y, z);elseupdate_cnt(rs(x), mid + 1, r, pos, y, z);pushup(x); }void update_sum(int x, int l, int r, int ql, int qr) {if (l >= ql && r <= qr) {tr[x].lz++;tr[x].sum = (tr[x].sum * 2) % mod;return;}pushdown(x);int mid = (l + r) >> 1;if (ql <= mid)update_sum(ls(x), l, mid, ql, qr);if (qr > mid)update_sum(rs(x), mid + 1, r, ql, qr);pushup(x); }LL query_cnt(int x, int l, int r, int ql, int qr) {if (l >= ql && r <= qr) {return tr[x].cnt;}int mid = (l + r) >> 1;pushdown(x);LL ans = 0;if (ql <= mid)ans += query_cnt(ls(x), l, mid, ql, qr);if (qr > mid)ans += query_cnt(rs(x), mid + 1, r, ql, qr);return ans; }LL query_sum(int x, int l, int r, int ql, int qr) {if (l >= ql && r <= qr) {return tr[x].sum;}int mid = (l + r) >> 1;LL ans = 0;pushdown(x);if (ql <= mid)ans += query_sum(ls(x), l, mid, ql, qr);if (qr > mid)ans += query_sum(rs(x), mid + 1, r, ql, qr);return ans % mod; }int main() {freopen("lcm.in", "r", stdin);freopen("lcm.out", "w", stdout);int n;while (~scanf("%d", &n)) {for (int i = 1; i <= n; i++) {scanf("%d%d", &a[i].x, &a[i].y);}sort(a + 1, a + 1 + n, cmp1);for (int i = 1; i <= n; i++) {a[i].rank = i;}sort(a + 1, a + 1 + n, cmp2);build(1, 1, n);LL ans = 0;for (int i = 1; i <= n; i++) {LL tmp = query_cnt(1, 1, n, 1, a[i].rank);update_cnt(1, 1, n, a[i].rank, tmp, a[i].x);ans = (ans + query_sum(1, 1, n, a[i].rank, n) * qpow(3, a[i].y) % mod) % mod;if (a[i].rank != n)update_sum(1, 1, n, a[i].rank + 1, n);}printf("%lld\n", ans);} }

總結(jié)

以上是生活随笔為你收集整理的【无码专区13】最小公倍数(线段树)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本国产在线观看 | 国产女人18水真多毛片18精品 | 尤物最新网址 | 传媒一区二区 | 99久久精品免费看国产 | 国产男人搡女人免费视频 | 亚洲综合久久婷婷 | 中文字幕人妻一区二区三区 | 四色在线| 大地资源在线观看免费高清版粤语 | www.youjizz日本 | 欧美午夜性 | 99视频在线观看免费 | 国产一区二区三区视频 | 男人懂得网站 | 精品人妻一区二区三区四区久久 | 91视频综合 | 国内外成人免费视频 | jizz在亚洲 | 成人在线超碰 | 一本到久久 | 日日操狠狠干 | 日本视频免费观看 | 国产精品视屏 | 麻豆三级 | 金鱼妻日剧免费观看完整版全集 | 黄色录像毛片 | 51福利视频 | 中文字幕乱码在线观看 | 国产精品一页 | 欧洲一区二区三区在线 | 亚洲天堂导航 | 午夜精品影院 | 黑森林福利视频导航 | 91视频 - 8mav| 日本少妇18p | 狠狠干天天爱 | 午夜视频网址 | 国产欧美一区二区精品性色99 | 人人爽人人爽人人 | 久久精品国产精品亚洲毛片 | 亚洲精品国偷拍自产在线观看蜜桃 | 最新中文字幕在线观看 | 国产黄色免费观看 | 亚洲欧美在线一区二区 | 麻豆视频在线 | 中国男人操女人 | 欧美在线中文字幕 | 久久午夜国产 | 影音先锋中文字幕人妻 | 亚洲午夜久久久久久久国产 | 上海贵妇尝试黑人洋吊 | 久久久久久日产精品 | 性涩av| 黄色在线观看网站 | 亚洲a级精品 | 欧美亚洲国产视频 | 亚洲超碰在线观看 | 精品黄网| 福利一区二区在线观看 | 高清国产一区二区 | 国产精品麻豆成人av电影艾秋 | 在线免费观看网站入口在哪 | 国内视频自拍 | 性xxx18| 99riav1国产精品视频 | 一边吃奶一边摸做爽视频 | 97超碰国产在线 | 天堂在线资源8 | 最污网站在线观看 | 欧美日韩久久久久 | 激情五月综合网 | 欧美日韩一级大片 | 日本熟妇毛耸耸xxxxxx | 国产二区三区 | 欧美 日韩 国产 高清 | 黄页视频在线免费观看 | 亚洲色图欧洲色图 | 偷拍老头老太高潮抽搐 | 国产999精品视频 | 久久久久久av无码免费网站下载 | 国产福利一区二区视频 | 久久性色av | 国产精品久久久久久久久久久久久久久久 | 久久精品视频一区二区 | 日本国产精品 | 亚洲一区欧美二区 | 亚洲三区精品 | 久久免费精品视频 | 精品一区二区三区在线观看 | 蜜臀久久99精品久久一区二区 | 成人福利一区二区 | 国产美女自拍视频 | 黑人糟蹋人妻hd中文字幕 | 免费三级av | 91免费播放 | 久久久久女人精品毛片九一 | 中文在线播放 | 亚洲精品久久久久久久久久久久久 |