【UOJ UNR #1】火车管理 可持久化线段树
用可持久化线段树维护每个站的第一辆车和每个站的前一次更新的位置即可。
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define maxn 500005
using namespace std;
inline int read() {
int x=,f=;char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-;
for(;isdigit(ch);ch=getchar()) x=x*+ch-'';
return x*f;
}
struct data {
int s[];
int tag,sum;
}t[maxn*];
int n,m,ty,cnt,last,tmp[maxn],rt[maxn];
void pushup(int o) {t[o].sum=t[t[o].s[]].sum+t[t[o].s[]].sum;}
void pushdown(int o,int l,int r) {
if(!t[o].tag) return;
int mid=(l+r)>>;
t[++cnt]=t[t[o].s[]];
t[cnt].tag=t[o].tag;t[cnt].sum=(mid-l+)*tmp[t[o].tag];t[o].s[]=cnt;
t[++cnt]=t[t[o].s[]];
t[cnt].tag=t[o].tag;t[cnt].sum=(r-mid)*tmp[t[o].tag];t[o].s[]=cnt;
t[o].tag=;
}
inline void add(int l,int r,int &o,int x,int L,int R,int ad){
if(!o) o=++cnt,t[o]=t[x];
if(L<=l&&R>=r){t[o].tag=ad;t[o].sum=(r-l+)*tmp[ad];return;}
int gg=t[o].tag;
pushdown(o,l,r);
int mid=(l+r)>>;
if(L<=mid) {if(!gg) t[o].s[]=; add(l,mid,t[o].s[],t[x].s[],L,R,ad);}
if(R>mid) {if(!gg) t[o].s[]=; add(mid+,r,t[o].s[],t[x].s[],L,R,ad);}
pushup(o);
}
int query1(int l,int r,int o,int L,int R) {
if(L<=l&&R>=r) return t[o].sum;
int mid=(l+r)>>;
pushdown(o,l,r);
int ans=;
if(L<=mid) ans+=query1(l,mid,t[o].s[],L,R);
if(R>mid) ans+=query1(mid+,r,t[o].s[],L,R);
return ans;
}
int query2(int l,int r,int o,int x) {
if(l==r) return t[o].tag;
int mid=(l+r)>>;
pushdown(o,l,r);
if(x<=mid) return query2(l,mid,t[o].s[],x);
else return query2(mid+,r,t[o].s[],x);
}
int main() {
n=read(),m=read(),ty=read();
for(int i=;i<=m;i++) {
int tp=read();rt[i]=++cnt;t[rt[i]]=t[rt[i-]];
if(tp==) {
int l=(read()+last*ty)%n+,r=(read()+last*ty)%n+;
printf("%d\n",last=query1(,n,rt[i],min(l,r),max(l,r)));
}
if(tp==) {
int l=(read()+last*ty)%n+,x=query2(,n,rt[i],l);
if(x!=) add(,n,rt[i],rt[i-],l,l,query2(,n,rt[x-],l));
}
if(tp==) {
int l=(read()+last*ty)%n+,r=(read()+last*ty)%n+;
tmp[i]=read();
add(,n,rt[i],rt[i-],min(l,r),max(l,r),i);
}
}
}
【UOJ UNR #1】火车管理 可持久化线段树的更多相关文章
- Uoj #218. 【UNR #1】火车管理 可持久化线段树+思维
Code: #include<bits/stdc++.h> #define maxn 500005 using namespace std; int n,Q,ty,lastans=0; i ...
- UOJ#77. A+B Problem [可持久化线段树优化建边 最小割]
UOJ#77. A+B Problem 题意:自己看 接触过线段树优化建图后思路不难想,细节要处理好 乱建图无果后想到最小割 白色和黑色只能选一个,割掉一个就行了 之前选白色必须额外割掉一个p[i], ...
- UNR #1 火车管理
很简单 用一个线段树维护 1.答案 2.当前栈顶是什么时候push进来的 然后用一棵以时间为版本的可持久化线段树维护每个操作之后第一个覆盖到他的操作是哪个 就可以了 询问直接在线段树上询问,修改在两棵 ...
- BZOJ.3218.a + b Problem(最小割ISAP 可持久化线段树优化建图)
BZOJ UOJ 首先不考虑奇怪方格的限制,就是类似最大权闭合子图一样建图. 对于奇怪方格的影响,显然可以建一条边\((i\to x,p_i)\),然后由\(x\)向\(1\sim i-1\)中权值在 ...
- 【NOIP2017】列队【可持久化线段树】
题目链接 题目描述 Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有n×mn×m名学生,方阵的行数为 n ...
- PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
- 【BZOJ-2653】middle 可持久化线段树 + 二分
2653: middle Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1298 Solved: 734[Submit][Status][Discu ...
- HDU 4866 Shooting(持久化线段树)
view code//第二道持久化线段树,照着别人的代码慢慢敲,还是有点不理解 #include <iostream> #include <cstdio> #include & ...
随机推荐
- 第一个Spring小程序实战
ps:本文偏向原理和操作性,原理适合于任何编译器. 支持Spring入门,目的是在xml文件里面装配相关bean(java对象),并实现获取.(IOC) 一.先建立一个Spring新项目,添加mave ...
- 列数不固定时怎么使用el-tabel展示数据
<el-table :data="contents" stripe> <el-table-column v-for="(item, index) in ...
- 正则表达式之旅_sed_awk
谈谈正则表达式这个东西: 我想作为一个程序员,正则表达式大家绝对不陌生. 正则表达式好像一个有限则动机.主要作用是匹配,但是同时因为这个功能,我们可以扩展很多其他用法 像很多语言都引人了正则表达式:j ...
- [剑指Offer] 23.二叉搜索树的后序遍历
[思路]BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两 ...
- servletContex.getRealPath 获取的是拼接后的地址 是虚假的
servletContex.getRealPath 获取的是拼接后的地址 是虚假的
- oracle默认查询当前表空间的数据 当夸空间查询时候 需要指定具体的用户空间
- NET 的 ELK 监控方案
NET 的 ELK 监控方案 https://www.jianshu.com/p/3c26695cfc38 背景就不多说了,谁家没有个几个十系统在跑啊.如何监控这几十个系统的运行状况,对于非运营人员来 ...
- BZOJ4476 JSOI2015送礼物(分数规划+单调队列)
看到这个式子当然先二分答案.得max-min-(j-i+k)ans>=0. 显然max-min相同的情况下所选区间长度越短越好,所以max和min都应该取在边界.那么实际上我们根本不用管端点是否 ...
- 洛谷 P2414 [NOI2011]阿狸的打字机 解题报告
P2414 [NOI2011]阿狸的打字机 题目背景 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机. 题目描述 打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母 ...
- auto login vpnclient bat
@echo offstart "" /b "C:\Program Files (x86)\Cisco Systems\VPN Client\vpngui.exe" ...