【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 & ...
随机推荐
- bootstrap和elementUI真的会冲突
前两天,做了一个支持markdown的功能: http://www.cnblogs.com/XHappyness/p/8097756.html 后面发现预览效果某些标签需要bootstrap的支持才能 ...
- css3 text-fill-color简介
text-fill-color是什么意思呢?单单从字面上来看就是“文本填充颜色”,不过它实际也是设置对象中文字的填充颜色,和color的效果很相似.如果同时设置text-fill-color和colo ...
- 【转】配置Tomcat使用https协议(配置SSL协议)
转载地址:http://ln-ydc.iteye.com/blog/1330674 内容概览: 如果希望 Tomcat 支持 Https,主要的工作是配置 SSL 协议 1.生成安全证书 2.配置to ...
- XJOI NOIP模拟题2
第一题 组合计数 分析: 从前往后一位一位的计算 先算第一位比t小的数目,再算第一位与t[1]相同,第2位比t小的个数以此类推 先预处理一个数组h,h[i]表示从1~it串与s串不同的位数 对于第i位 ...
- 【bzoj5071】[Lydsy十月月赛]小A的数字 乱搞
题目描述 有一串数字 A1,A2...An 每次可以进行如下操作,选择一个数字 i ,将 (Ai-1 , Ai , Ai+1) 变为 (Ai-1 + Ai , -Ai , Ai+1 + Ai) ,特别 ...
- 【bzoj5070】危险的迷宫 费用流
题目描述 JudgeOnline/upload/201710/55.doc 输入 第一行是两个整数A与B(1≤A,B≤10),中间用空格分隔,表示该迷宫是A行B列的. 第2行至第A+1行,每行有B个1 ...
- P4462 [CQOI2018]异或序列
题目描述 已知一个长度为n的整数数列 a1,a2,...,ana_1,a_2,...,a_na1,a2,...,an ,给定查询参数l.r,问在 al,al+1,...,ara_l,a_{l+1 ...
- Generator实质
Generator实质 来源: <http://blog.liuwanlin.info/generatorshi-zhi/> superlin • September 15, 2015 ...
- [Leetcode] spiral matrix ii 螺旋矩阵
Given an integer n, generate a square matrix filled with elements from 1 to n 2 in spiral order. For ...
- linux下搭建redis并解决无法连接redis的问题
以前公司在开发阶段连接的redis一直是正式环境中的,最近老大让我在搭建一个局域网内的redis用于开发阶段时连接使用,搭建过程中也遇到了一些问题,还好已经解决了,在这里记录一下. 首先是搭建redi ...