题目:

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+;
typedef long long LL;
typedef unsigned long long ULL;
//typedef pair<LL,LL> P;
const LL mod=**;
const ULL base=1e7+;
using namespace std;
unsigned x,y,z,w;
unsigned RNG(){
x=x^(x<<);
x=x^(x>>);
x=x^(x<<);
x=x^(x>>);
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=;
if(l!=r){
int mid=(a[d].l+a[d].r)>>;
build(l,mid,lc);
build(mid+,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)>>;
if(a[d].lz!=){
add(a[d].l,mid,lc,a[d].lz);
add(mid+,a[d].r,rc,a[d].lz);
a[d].lz=;
}
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+,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)>>;
if(a[d].lz!=){
add(a[d].l,mid,lc,a[d].lz);
add(mid+,a[d].r,rc,a[d].lz);
a[d].lz=;
}
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=;
cin>>n>>m>>x>>y>>z;
build(,n,);
unsigned f1,f2,f3;
LL l,r,v;
for(int i=;i<=m;i++){
f1=RNG();
f2=RNG();
f3=RNG();
l=min((f1%n)+,(f2%n)+);
r=max((f1%n)+,(f2%n)+);
v=f3%mod;
add(l,r,,v);
}
LL res=;
for(int i=;i<=n;i++){
res^=1ll*i*(query(i,i,));
}
cout<<res<<endl;
}
}
05-08 15:24