【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 & ...
随机推荐
- 【工作感悟】——xyb项目部署
[前言] 接手xyb项目维护有一段时间了,除了熟悉业务需求和开发环境外,还没有进行新需求的开发.前几天突然接到一个任务,要去发改委给他们部署一版最新的系统.本来事情也不大,也没有很难.但是本来是大屈. ...
- Chromium之各国语言切换
在\src\build\Debug\locales\目录下存放着各国语言所需要的资源文件xx.pak,我这边共有53中语言支持. 命令行进入src\build\Debug目录,敲:chrome.exe ...
- JavaScript归并方法reduce()和reduceRight()
ECMAScript 5还新增了两个归并数组的方法:reduce()和reduceRight().这两个方法都会迭代数组的所有项,然后构建一个最终返回的值.其中,reduce()方法从数组的第一项开始 ...
- JSON语法(3)
JSON语法是JavaScript语法的子集. JSON语法规则 数据在名称/值对中 数据由逗号分割 花括号保存对象 方括号保存数组 JSON名称/值对 JSON数据的书写格式是:名称/值对. 名称/ ...
- 2017 Multi-University Training Contest - Team 2 TrickGCD(组合数学)
题目大意: 给你一个序列An,然后求有多少个序列Bn 满足Bi<=Ai,且这个序列的gcd不为1 题解: 考虑这样做 枚举一个因子k,然后求出有多少个序列的gcd包含这个因子k 然后把结果容斥一 ...
- 【BZOJ 1930】 [Shoi2003]pacman 吃豆豆 最大费用最大流
如果你知道他是网络流的话你就很快会想到一个最大费用最大流的模型,然后你发现可能T,然而你发现你只用增广两次,然后你就开心的打了出来,然后发现被稠密图里spfa的丧病时间复杂度坑了,还是会T.于是我就开 ...
- strings用法小记
By francis_hao Feb 14,2017 打印文件中可打印字符,每个序列至少四(可配置)个字符长.主要用于显示非文本文件 概述 选项解释 -a --all - 扫描整个文件,不管 ...
- taotao用户注册前台页面
注册页面效果: 注册jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- HDU 1059 完全背包
Dividing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- POJ1637:Sightseeing tour(混合图的欧拉回路)
Sightseeing tour Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10581 Accepted: 4466 ...