题目大意:

给定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 ;
}

hdu6354 /// 线段树的更多相关文章

  1. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  2. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  3. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  4. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  5. codevs 1082 线段树区间求和

    codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...

  6. PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树

    #44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...

  7. CF719E(线段树+矩阵快速幂)

    题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...

  8. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

  9. 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1878  Solved: 846[Submit][Status ...

随机推荐

  1. crypto 密码加密

    转自 'use strict'; var crypto = require('crypto'); /** * generates random string of characters i.e sal ...

  2. MYSQL索引的深入学习

    通常大型网站单日就可能会产生几十万甚至几百万的数据,对于没有索引的表,单表查询可能几十万数据就是瓶颈. 一个简单的对比测试 以我去年测试的数据作为一个简单示例,20多条数据源随机生成200万条数据,平 ...

  3. 转 Jmeter业务请求比例

    [转载]Jmeter业务请求比例1   ps:文章转自订阅号“测试那点事儿”,链接:https://mp.weixin.qq.com/s/qVD4iNO0QqRIwAIq9_E_Kw   方法二: 可 ...

  4. maven项目中 把依赖的jar包一起打包

    1.pom.xml 配置文件: 在pom.xml配置文件中添加 <build> <plugins> <plugin> <artifactId>maven ...

  5. TurtleBOT3

    ubuntu更换源 sudo cp /etc/apt/sources.list /etc/apt/sources_backup.list sudo gedit /etc/apt/sources.lis ...

  6. HashSet、LinkedHashSet、TreeSet的区别

    HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放: LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代: Tree ...

  7. python字典拼接方法

    python的dict拼接有多种方法,其中一种很好用而且速度非常快: x = {**a, **b} 效果等价于: x = a.copy() x.update(b) 注意update()是没有返回值的 ...

  8. 【学术篇】CF932E Team Work && bzoj5093 图的价值

    两个题的传送门 对于CF这道题, 分别考虑每种可能的集合大小, 每个大小为\(k\)的集合数量有\(\binom nk\)个, 所以最后的答案就是 \[\sum_{i=0}^n\binom{n}{i} ...

  9. day09 python函数 返回值 参数

    day09 python   一.函数     1.函数         函数是对功能的封装         语法:         定义函数:             def 函数名(形参):    ...

  10. Sphinx + Read the docs theme

    前言: 使用Sphinx 生成文档和使用 Read The Docs 的 readthedocs/sphinx_rtd_theme,假设是在Windows上运行并已安装好 python,可以执行pyt ...