hdu6354 /// 线段树
题目大意:
给定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 /// 线段树的更多相关文章
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...
- CF719E(线段树+矩阵快速幂)
题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
随机推荐
- SpringMVC_HandlerMethodArgumentResolver 实践
HandlerMethodArgumentResolver 是什么? 就是用于解析参数的一个接口,springMVC(4.1)会直接调用这个接口的方法,对参数进行一定的解析.比如会在 Invocab ...
- linux/unix下setuid/seteuid/setreuid/setresuid
其中setresuid()具有最清晰的语法: setresuid()被执行的条件有: ①当前进程的euid是root ②三个参数,每一个等于原来某个id中的一个 如果满足以上条件的任意一个,setre ...
- Hibernate4教程一:入门介绍
第一部分:Hibernate入门 Hibernate是什么 Hibernate是一个轻量级的ORM框架 ORM原理(Object Relational Mapping) ORM ...
- 从Airbnb的发展历程和网易云的大起大落看IT行业创新(第5周课后作业)
我想先根据个人看法回答“创新是什么?”这个空泛的问题.创新是面对当下的资源条件限制创造出能够满足动态需求或解决动态发展中的问题的新策略.这种实用化定义在大部分邻域都勉强能让定义者自圆其说,对于IT行业 ...
- 【mysql升级步骤】windows mysql版本升级 ,mysql 5.6 升级到5.7.27
最近博主由于工作原因需要把之前安装好的的mysql 5.6.44版本卸载,然后安装mysql 5.7.*版本. 前提:为什么要升级到5.7版本? 因为博主在5.6版本上执行脚本时候报出异常:to yo ...
- BiLSTM介绍
https://www.jiqizhixin.com/articles/2018-10-24-13 (机器之心)
- 四大开源协议比较:BSD、Apache、GPL、LGPL(转)
转自: 四大开源协议比较:BSD.Apache.GPL.LGPL 本文参考文献:http://www.fsf.org/licensing/licenses/ 现今存在的开源协议很多,而经过Open S ...
- 【LeetCode】Math
[263] Ugly Number [Easy] 一个数的质因子只有2,3,5就叫丑数,写个函数判断丑数. //Author: Wanying //注意 0 和 1 的corner case, 你居然 ...
- 使用navigator.userAgent来判断浏览器类型
var br=navigator.userAgent.toLowerCase(); var browserVer=(br.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ...
- android studio 设计任务内容和识别内容界面 (android stuido design task layout)
本人android studio版本是 3.4.1,设计了一个任务内容和识别内容的界面,欢迎大家品尝. 界面显示如下图所示: 实现代码如下: <?xml version="1.0&qu ...