题目大意:

给定n m x y z

长度为n的序列初始为0

接下来m个操作 l r v 将l r区间内比v小的数都变成v

l r v由x y z和给定的函数生成

线段树维护区间 最大值 最小值 再加 lazy标记

当v大于某个区间的最大值时 整个区间都要变成v 用lazy标记

当v小于某个区间的最小值时 整个区间都不需要操作

题解:https://blog.csdn.net/weixin_39453270/article/details/81462219

#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long
#define mem(i,j) memset(i,j,sizeof(i))
const int N=1e5+;
const int MOD=1e9+; #define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define root 1,n,1
int maxi[N<<], mini[N<<], lazy[N<<];
void pushUp(int rt) {
maxi[rt]=max(maxi[rt<<],maxi[rt<<|]);
mini[rt]=min(mini[rt<<],mini[rt<<|]);
}
void pushDown(int rt) {
if(lazy[rt]!=-) {
mini[rt<<]=max(mini[rt<<],lazy[rt]);
mini[rt<<|]=max(mini[rt<<|],lazy[rt]);
maxi[rt<<]=max(maxi[rt<<],lazy[rt]);
maxi[rt<<|]=max(maxi[rt<<|],lazy[rt]);
lazy[rt<<]=max(lazy[rt<<],lazy[rt]);
lazy[rt<<|]=max(lazy[rt<<|],lazy[rt]);
lazy[rt]=-;
}
}
void build(int l,int r,int rt) {
lazy[rt]=-;
if(l==r) {
mini[rt]=maxi[rt]=;
return ;
}
int m=(l+r)>>;
build(lson);
build(rson);
pushUp(rt);
}
void update(int L,int R,int v,int l,int r,int rt) {
if(l==r) {
mini[rt]=max(mini[rt],v);
maxi[rt]=max(maxi[rt],v);
return;
}
if(L<=l && r<=R) {
if(maxi[rt]<=v) {
maxi[rt]=mini[rt]=v;
lazy[rt]=max(lazy[rt],v);
return;
}
}
if(mini[rt]>=v) return;
pushDown(rt);
int m=(l+r)>>;
if(L<=m) update(L,R,v,lson);
if(m<R) update(L,R,v,rson);
pushUp(rt);
}
LL query(int pos,int l,int r,int rt) {
if(l==r) return 1LL*pos*mini[rt];
pushDown(rt);
int m=(l+r)>>;
if(pos<=m) return query(pos,lson);
else return query(pos,rson);
} int n, m;
unsigned int x, y, z;
unsigned int RNG61() {
x=x^(x<<);
x=x^(x>>);
x=x^(x<<);
x=x^(x>>);
unsigned int w=x^(y^z);
x=y, y=z, z=w;
return z;
}
int main()
{
int t; scanf("%d",&t);
while(t--) {
scanf("%d%d%u%u%u",&n,&m,&x,&y,&z);
build(root);
for(int i=;i<=m;i++) {
int l=RNG61()%n+;
int r=RNG61()%n+;
int v=RNG61()%(<<);
if(l>r) swap(l,r);
update(l,r,v,root);
}
LL ans=;
for(int i=;i<=n;i++)
ans^=query(i,root);
printf("%lld\n",ans);
} return ;
}

最新文章

  1. Titanium studio介绍
  2. [原创]cocos2d-x研习录-第三阶 特性之加速度传感器
  3. MYSQL查询优化
  4. webconfig和appconfig中出现特殊字符如何处理
  5. linux C(hello world) 二维数组的练习
  6. grunt + compass
  7. 【转】AngularJs $location获取url参数
  8. java课程设计(计算器)
  9. 【译】在Asp.Net中操作PDF - iTextSharp - 绘制矢量图
  10. perl学习(10) 字符串处理函数和排序
  11. PHP appserv + ZendStudio12.5.1 + 注册码
  12. python之time模块
  13. Dynamics 365 POA表记录的查询
  14. DIY 空气质量检测表
  15. Error:Execution failed for task &#39;:app:transformResourcesWithMergeJavaResForDebug&#39;
  16. getaddrinfo函数
  17. 自己封装myLocalStorage,使其有有效期
  18. GCD与莫比乌斯反演的勾当
  19. REDIS 配制
  20. 【bzoj4195】[Noi2015]程序自动分析 离散化+并查集

热门文章

  1. 推荐MarkDown编辑工具Typora--文本画流程图示例
  2. python-模块 time, os, sys
  3. js两个数组去重后,绑定控件,并支持模糊搜索数组项以及数组互移
  4. Android蓝牙自动配对Demo,亲测好使!!!(转)
  5. spark window本地运行wordcount错误
  6. mysql的数据导出方法2
  7. 浅谈JAVA线程
  8. 超实用的HTML代码段(赵荣娇)
  9. php高版本安装ecshop错误解决方法
  10. Delphi实现获取句柄并发送消息的方法(FindWindow、FindWindowEx、EnumChildWindows、SendMessage)