CF1100F Ivan and Burgers

CF1100F Ivan and Burgers

靜態區間,選取任意個數使得它們的異或和最大

\(n,\ m\leq5\times10^5,\ a_i\in[0,\ 10^6]\)

lxl ST表,線性基


如果暴力維護線性基,線段樹時間復雜度為 \(O(n\log^2n)-O(\log^3n)\)

由于重復元素對答案沒有影響,于是可以用 ST表 維護,時間復雜度為 \(O(n\log^3n)-O(\log^2n)\)

兩種做法都無法通過本題。

如果沿用這個思路,瓶頸顯然在線性基合并的 \(O(\log^2n)\) 上,無法再加優化

線段樹做法顯然無法再加拓展(和 lxl ST表時間復雜度一樣的貓樹空間復雜度多一只 \(\log\) ),于是考慮拓展 ST表 做法

常見的 RMQ 有 ST表 的 \(O(n\log n)-O(1)\) 的做法,但 \(O(n)-O(1)\) 的標準RMQ很難寫、常數較大,且無法解決本題,于是可以考慮在隨機數據下期望 \(O(n)-O(1)\) 的 lxl ST表

分塊,大小設為 \(x\)

預處理每個塊兩端到塊內每個點的前綴 \(\max\) 和后綴 \(\max\)

預處理塊間ST表

若查詢 \([l,\ r]\) ,且 \(l,\ r\) 分別在塊 \(a,\ b\)

比如說我查l,r,這兩個分別在塊a,b中

則查塊 \(a,\ b\) 之間的 RMQ ,以及 \(l\)\(a\) 塊的后綴 \(\max\)\(r\)\(b\) 塊的前綴 \(\max\)

\(l,\ r\) 在同一塊中時,暴力求解

可以取 \(x=\log n\) ,當 \(l,\ r\) 不在同一塊中時,這個算法是 \(O(1)\)

摘自 P3793 由乃救爺爺

如上維護,預處理塊中前綴后綴線性基 \(O(n\log n)\) ,塊間ST表線性基 \(O(\frac{n}{x}\log n\log^2n)=O(n\log^2n)\)

\(l,\ r\) 在同一塊中,將 \([l,\ r]\) 中的元素暴力插入線性基, \(O(x\log n)=O(\log^2n)\) ;若 \(l,\ r\) 不在同一塊中,合并前綴后綴塊間三個線性基 \(O(\log^2n)\)

綜上所述,時間復雜度 \(O(n\log^2n)\) ,空間復雜度 \(O(n\log n)\) 可能還需要卡卡常

代碼

#include <bits/stdc++.h>
using namespace std;const int maxn = 5e5 + 10, maxm = 7850, base = 63;
int n, m, tot, lg[maxm], a[maxn];#define get(x) (((x) + base) >> 6)struct linear_base {int a[20];inline void clr() {memset(a, 0, sizeof a);}inline void ins(int x, int lim = 19) {for (int i = lim; ~i; --i) {if (x >> i & 1) {if (!a[i]) { a[i] = x; return; }x ^= a[i];}}}inline int query() {int res = 0;for (int i = 19; ~i; --i) {if ((res ^ a[i]) > res) res ^= a[i];}return res;}
} null, lef[maxn], rig[maxn], val[13][maxm];inline linear_base operator + (linear_base A, const linear_base &B) {for (int i = 19; ~i; --i) {if (B.a[i]) A.ins(B.a[i], i);}return A;
}const int maxn_r = maxn * 23, maxn_w = maxn * 8;
char buf_r[maxn_r], *now_r = buf_r;
char buf_w[maxn_w], *now_w = buf_w;inline int read() {int x = 0;while (*now_r < 48) ++now_r;while (*now_r > 47) x = (x << 3) + (x << 1) + (*now_r ^ 48), ++now_r;return x;
}inline void write(int x) {static char *tp, st[7];if (!x) *now_w = 48, ++now_w;for (tp = st; x; *++tp = x % 10 | 48, x /= 10);while (tp != st) *now_w = *tp, ++now_w, --tp;*now_w = 10, ++now_w;
}inline linear_base query(const int &l, const int &r) {if (l > r) return null;const int k = lg[r - l + 1];return val[k][l] + val[k][r - (1 << k) + 1];
}int main() {fread(buf_r, 1, maxn_r, stdin);n = read(), tot = get(n);for (int i = 1; i <= n; ++i) {a[i] = read();val[0][get(i)].ins(a[i]);}for (int i = 2; i <= tot; ++i) {lg[i] = lg[i >> 1] + 1;}linear_base lst;lst.clr();for (int i = 1; i <= n; ++i) {lst.ins(a[i]), lef[i] = lst;if (!(i & base)) lst.clr();}lst.clr();for (int i = n; i; --i) {if (!(i & base)) lst.clr();lst.ins(a[i]), rig[i] = lst;}for (int i = 1; i <= lg[tot]; ++i) {for (int j = 1; j + (1 << i) - 1 <= tot; ++j) {val[i][j] = val[i - 1][j] + val[i - 1][j + (1 << (i - 1))];}}m = read();register linear_base ans;for (int q = 1; q <= m; ++q) {const int l = read(), r = read();const int L = get(l), R = get(r);ans.clr();if (L == R) {for (register int i = l; i <= r; ++i) {ans.ins(a[i]);}} else {ans = rig[l] + lef[r] + query(L + 1, R - 1);}write(ans.query());}fwrite(buf_w, 1, now_w - buf_w, stdout);return 0;
}

轉載于:https://www.cnblogs.com/Juanzhang/p/10877782.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275144.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275144.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275144.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入淺出Nintex——更新PeopleandGroup類型的Field

轉載于:https://www.cnblogs.com/mingle/archive/2011/11/25/2263199.html

從 vue-cli 源碼中,我發現了27行讀取 json 文件有趣的 npm 包

1. 前言大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。已進行四個月了&#xff0c;很多小伙伴表示收獲頗豐。想學源碼&#xff0c;極力推薦訂閱我寫…

自定義view示例_自定義404頁的10個示例(從最佳到最差)

自定義view示例自定義404頁面 (Custom 404 pages) To customize or not to customize your 404 page? I hope by now you know the answer is that, yes, under essentially all circumstances you should customize your 404 page. 404 errors occur when someone attempts t…

BTF:實踐指南

本文地址&#xff1a;BTF&#xff1a;實踐指南 | 深入淺出 eBPF 1. BPF 的常見限制 1.1 調試限制1.2 可移植性2. BTF 是什么&#xff1f;3. BTF 快速入門 3.1 BPF 快速入門3.1 BTF 和 CO-RE4. 結論 BPF 是 Linux 內核中基于寄存器的虛擬機&#xff0c;可安全、高效和事件驅動…

python 混入類MixIn

寫在前面 能把一件事情說的那么清楚明白&#xff0c;感謝廖雪峰的官方網站。 1.為什么要用混入類&#xff1f;&#xff08;小白入門&#xff09; 繼承是面向對象編程的一個重要的方式&#xff0c;因為通過繼承&#xff0c;子類就可以擴展父類的功能。 step1: 回憶一下Animal類層…

關于字符串流的學習(c++)

/* 字符串流 在字符數組中可以存放字符,也可以存放整數、浮點數以及其他類型的數據。在向字符數組存入數據之前,要先將數據從二進制形式轉換為ASCII代碼,然后存放在緩沖區,再從緩沖區送到字符數組。從字符數組讀數據時,先將字符數組中的數據送到緩沖區,在賦給變量前要先將ASCII…

估計很多前端都沒學過單元測試~

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。已進行四個月了&#xff0c;很多小伙伴表示收獲頗豐。想學源碼&#xff0c;極力推薦訂閱我寫的《學習…

xd可以用ui動效效果嗎_通過動畫使UI設計栩栩如生:Adobe XD和After Effects

xd可以用ui動效效果嗎Note — If you don’t fancy splashing out on an Adobe license, you can trial their products for 14 days each. That should give you more than enough time to play, check it out.注意—如果您不愿意花錢購買Adobe許可證&#xff0c;則可以分別試…

BookMarklet:瑞士軍刀你用了嗎?

Bookmarklet 是一段隱藏在鏈接后面的js代碼&#xff0c;可以收藏在收藏夾。通過這段代碼&#xff0c;我們可以跨瀏覽器&#xff08;當然&#xff0c;也跨平臺&#xff09;實現一些工具。比起瀏覽器插件來說&#xff0c;使用更加方便。典型的&#xff0c;dict.cn 網站的工具和有…

第十二周編程總結

這個作業屬于那個課程C語言程序設計II這個作業要求在哪里https://pintia.cn/problem-sets/1127748174659035136/problems/1127749414029729792我在這個課程的目標是更好的學習函數這個作業在那個具體方面幫助我實現目鍛煉了我的編程能力參考文獻c語言程序設計26-1 計算最長的字…

可能是全網首個前端源碼共讀活動,誠邀加入學習

大家好&#xff0c;我是若川。從8月份到現在11月結束了。每周一期&#xff0c;一起讀200行左右的源碼&#xff0c;撰寫輔助文章&#xff0c;截止到現在整整4個月了。由寫有《學習源碼整體架構系列》20余篇的若川【若川視野公眾號號主】傾力組織&#xff0c;召集了各大廠對于源碼…

現代游戲中的UX趨勢

ux設計中的各種地圖游戲UX (GAMES UX) Even though websites and games have matured side-by-side over the past few decades, games have a long and detailed history of user experience. Sure, it was scrappy and fairly rudimentary initially, but the only way you c…

SQL Server 2008 安裝過程中遇到“性能計數器注冊表”..

Windows 2008 系統 SQL Server 2008 性能計數器注冊表作者&#xff1a; 來源&#xff1a; 時間&#xff1a;2010-6-13 完美集成、增強 KindEditor HTML 編輯器今天跟隨部門老大去現場學習&#xff0c;安裝 Windows208 下 SQL Server2008&#xff0c…

你提交代碼前沒有校驗?巧用gitHooks解決

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。已進行四個月了&#xff0c;很多小伙伴表示收獲頗豐。想學源碼&#xff0c;極力推薦訂閱我寫的《學習…

Linux下自動化測試環境的搭建

1.安裝Linux虛擬機&#xff0c;詳情參考 https://blog.csdn.net/qq_22770715/article/details/78558374 https://www.cnblogs.com/Q277227/p/8176564.html 1.1 需要確定IP &#xff0c;使用 ifconfig 1.2 linux的用戶名跟密碼&#xff1b; 1.3 確定可以遠程ssh登錄&…

code craft_以Craft.io為先—關于我們行業的實踐職業道路的系列

code craft重點 (Top highlight)For the past two decades, digital product design / UX has been shifting to become a more strategic discipline within organizations. Partially because business leaders have started to pay attention to how design-driven companie…

Nginx+httpd反代實現動靜分離

什么是動靜分離為了提高網站的響應速度&#xff0c;減輕程序服務器&#xff08;apachephp&#xff0c;nginxphp等&#xff09;的負載&#xff0c;對于靜態資源比如圖片&#xff0c;js&#xff0c;css&#xff0c;html等靜態文件&#xff0c;我們可以在反向代理服務器中設置&…

(建議收藏)前端面試必問的十六條HTTP網絡知識體系

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。已進行四個月了&#xff0c;很多小伙伴表示收獲頗豐。想學源碼&#xff0c;極力推薦訂閱我寫的《學習…

了解 DB2 Version 9.5 中的全局變量(轉)

轉自&#xff1a;http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0711zubiri/ 簡介 在關系數據庫系統內部&#xff0c;應用程序和實際數據庫之間的主要交互都是以會話或連接的 SQL 語句形式來實現的。過去&#xff0c;為了在相同會話中實現不同 SQL 語句之…

jQuery新版本加載json注意事項。

jQuery在1.4版本后&#xff0c;采用了更為嚴格的json解析方式&#xff0c;所以所有內容都必須要有雙引號。比如以前{key:”28CATEGORY”,status:”0″}是沒問題的。但升級成1.4后&#xff0c;都必須加上雙引號&#xff1a;{“key” : “28CATEGORY”,“status” : “0″}如果你…