hdu6356-Glad You Came【RMQ】
生活随笔
收集整理的這篇文章主要介紹了
hdu6356-Glad You Came【RMQ】
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
正題
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=6356
題目大意
nnn個(gè)數(shù)的一個(gè)序列aaa開始都是000。mmm個(gè)操作[li,ri,vi][l_i,r_i,v_i][li?,ri?,vi?]表示ax=max{ax,v}(li≤x≤ri)a_x=max\{a_x,v\}(l_i\leq x\leq r_i)ax?=max{ax?,v}(li?≤x≤ri?),求最終序列
解題思路
我們考慮將RMQRMQRMQ反過來操作,我們直接修改fi,jf_{i,j}fi,j?然后將RMQRMQRMQ反過來轉(zhuǎn)移即可。時(shí)間復(fù)雜度O(T(m+nlog?n))O(\ T(m+n\log n)\ )O(?T(m+nlogn)?)
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> #define uit unsigned int using namespace std; const uit N=1e5+10; uit T,n,m,x,y,z,lg[N],f[N][30]; uit answer(){x^=(x<<11); x^=(x>>4); x^=(x<<5); x^=(x>>14);uit w=x^y^z; x=y; y=z; z=w; return z; } int main() {scanf("%u",&T);for(uit i=2;i<N;i++)lg[i]=lg[i/2]+1;while(T--){scanf("%u%u%u%u%u",&n,&m,&x,&y,&z);memset(f,0,sizeof(f));for(uit i=1;i<=m;i++){uit f1=answer()%n,f2=answer()%n,v=answer()%1073741824u;uit l=min(f1,f2)+1,r=max(f1,f2)+1,z=lg[r-l+1];f[l][z]=max(f[l][z],v);f[r-(1u<<z)+1][z]=max(f[r-(1u<<z)+1][z],v); }for(int i=lg[n]-1;i>=0;i--)for(uit j=1;j+(1<<i)-1<=n;j++){f[j][i]=max(f[j][i],f[j][i+1]);if(j+(1<<i)<=n)f[j+(1<<i)][i]=max(f[j+(1<<i)][i],f[j][i+1]);}long long ans=0;for(long long i=1;i<=n;i++)ans=ans^(i*f[i][0]);printf("%lld\n",ans);} }總結(jié)
以上是生活随笔為你收集整理的hdu6356-Glad You Came【RMQ】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CF442C-Artem and Arr
- 下一篇: 怪不得电脑硬件配置不对劲电脑配置不对怎么