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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

「HDU6579 Operation」 - 线性基

發(fā)布時(shí)間:2024/8/26 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 「HDU6579 Operation」 - 线性基 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

HDU 6579

tags:線性基,優(yōu)化

題意

讓你在區(qū)間 \([l,r]\) 中選若干個(gè)數(shù),使得異或和最大
支持末尾加入,區(qū)間查詢,強(qiáng)在

題解

可以暴力維護(hù)區(qū)間的線性基,但是會(huì)超時(shí)

考慮維護(hù)每個(gè)點(diǎn)的前綴線性基,線性基里將靠右的數(shù)字盡可能放高位,就是存一個(gè)額外存一個(gè)位置 p,表示這個(gè)位上的數(shù)的位置,從高位到低位掃,如果當(dāng)前位置大于這個(gè)位上的位置那么交換,然后就得到了一個(gè)靠右的數(shù)字盡可能在高位的線性基

然后對(duì)于詢問(wèn) \([l,r]\)\(r\) 的前綴線性基里找,只在位置大于等于 \(l\) 的位更新答案

#include<cstdio> #include<algorithm> #define int long long #define rep(i,a,b) for(int i=(a);i<=(b);++i) template<typename T>inline void rd(T&x){int fl=0,ch;while(ch=getchar(),ch<48||57<ch)fl^=!(ch^45);x=(ch&15);while(ch=getchar(),47<ch&&ch<58)x=x*10+(ch&15);if(fl)x=-x;} template<typename T>inline void pt(T x){if(x<0)putchar('-'),x=-x;if(x>9)pt(x/10);putchar(x%10+48);} template<typename T>inline void pt(T x,int ch){pt(x),putchar(ch);} template<typename T>inline T max(const T&x,const T&y){return x<y?y:x;} template<typename T>inline T min(const T&x,const T&y){return x<y?x:y;} const int N=500005; int T,n,m,a[N],b[N][31],p[N][31]; void ins(int*b,int*p,int x,int pos){for(int i=30;~i;--i)if(x>>i&1){if(!b[i]){b[i]=x;p[i]=pos;break;}else{if(pos>p[i]){std::swap(b[i],x);std::swap(p[i],pos);}x^=b[i];}} } int qry(int*b,int*p,int pos){int res=0;for(int i=30;~i;--i)if(p[i]>=pos&&(res^b[i])>res)res^=b[i];return res; } signed main(){rd(T);while(T--){int n,m;rd(n),rd(m);rep(i,1,n){rd(a[i]);memcpy(b[i],b[i-1],sizeof(b[i]));memcpy(p[i],p[i-1],sizeof(p[i]));ins(b[i],p[i],a[i],i);}int lst=0;while(m--){int op;rd(op);if(op==0){int l,r;rd(l),rd(r);l=(l^lst)%n+1,r=(r^lst)%n+1;if(r<l)l^=r^=l^=r;pt(lst=qry(b[r],p[r],l),'\n');}else{rd(a[++n]);a[n]^=lst; memcpy(b[n],b[n-1],sizeof(b[n])); memcpy(p[n],p[n-1],sizeof(p[n]));ins(b[n],p[n],a[n],n);}}}return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/xay5421/p/HDU6579.html

與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的「HDU6579 Operation」 - 线性基的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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