题目:
HDU 6356
http://acm.hdu.edu.cn/showproblem.php?pid=6356
很裸的线段树
#include<bits/stdc++.h> #define fi first #define se second #define INF 0x3f3f3f3f #define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) #define pqueue priority_queue #define NEW(a,b) memset(a,b,sizeof(a)) #define si(x) scanf("%lld",&x) #define lowbit(x) (x&(-x)) #define lc (d<<1) #define rc (d<<1|1) #define eps 1e-9 const double pi=4.0*atan(1.0); const double e=exp(1.0); const int maxn=1e7+8; typedef long long LL; typedef unsigned long long ULL; //typedef pair<LL,LL> P; const LL mod=1024*1024*1024; const ULL base=1e7+7; using namespace std; unsigned x,y,z,w; unsigned RNG(){ x=x^(x<<11); x=x^(x>>4); x=x^(x<<5); x=x^(x>>14); w=x^(y^z); x=y; y=z; z=w; return z; } struct node{ int l,r,mi,lz; }a[maxn]; void build(int l,int r,int d){ a[d].l=l; a[d].r=r; a[d].mi=a[d].lz=0; if(l!=r){ int mid=(a[d].l+a[d].r)>>1; build(l,mid,lc); build(mid+1,r,rc); } } void add(int l,int r,int d,int x){ if(l==a[d].l&&r==a[d].r){ a[d].lz=max(x,a[d].lz); a[d].mi=max(x,a[d].mi); return ; } if(x<=a[d].mi){ return ; } int mid=(a[d].l+a[d].r)>>1; if(a[d].lz!=0){ add(a[d].l,mid,lc,a[d].lz); add(mid+1,a[d].r,rc,a[d].lz); a[d].lz=0; } if(l>mid){ add(l,r,rc,x); } else if(r<=mid){ add(l,r,lc,x); } else{ add(l,mid,lc,x); add(mid+1,r,rc,x); } a[d].mi=min(a[lc].mi,a[rc].mi); } int query(int l,int r,int d){ if(l==a[d].l&&r==a[d].r){ return a[d].mi; } int mid=(a[d].l+a[d].r)>>1; if(a[d].lz!=0){ add(a[d].l,mid,lc,a[d].lz); add(mid+1,a[d].r,rc,a[d].lz); a[d].lz=0; } if(l>mid){ return query(l,r,rc); } else if(r<=mid){ return query(l,r,lc); } } int main(){ fio; int t; cin>>t; int n,m; while(t--){ w=0; cin>>n>>m>>x>>y>>z; build(1,n,1); unsigned f1,f2,f3; LL l,r,v; for(int i=1;i<=m;i++){ f1=RNG(); f2=RNG(); f3=RNG(); l=min((f1%n)+1,(f2%n)+1); r=max((f1%n)+1,(f2%n)+1); v=f3%mod; add(l,r,1,v); } LL res=0; for(int i=1;i<=n;i++){ res^=1ll*i*(query(i,i,1)); } cout<<res<<endl; } }