用可持久化线段树维护每个站的第一辆车和每个站的前一次更新的位置即可。

 #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】火车管理 可持久化线段树的更多相关文章

  1. Uoj #218. 【UNR #1】火车管理 可持久化线段树+思维

    Code: #include<bits/stdc++.h> #define maxn 500005 using namespace std; int n,Q,ty,lastans=0; i ...

  2. UOJ#77. A+B Problem [可持久化线段树优化建边 最小割]

    UOJ#77. A+B Problem 题意:自己看 接触过线段树优化建图后思路不难想,细节要处理好 乱建图无果后想到最小割 白色和黑色只能选一个,割掉一个就行了 之前选白色必须额外割掉一个p[i], ...

  3. UNR #1 火车管理

    很简单 用一个线段树维护 1.答案 2.当前栈顶是什么时候push进来的 然后用一棵以时间为版本的可持久化线段树维护每个操作之后第一个覆盖到他的操作是哪个 就可以了 询问直接在线段树上询问,修改在两棵 ...

  4. BZOJ.3218.a + b Problem(最小割ISAP 可持久化线段树优化建图)

    BZOJ UOJ 首先不考虑奇怪方格的限制,就是类似最大权闭合子图一样建图. 对于奇怪方格的影响,显然可以建一条边\((i\to x,p_i)\),然后由\(x\)向\(1\sim i-1\)中权值在 ...

  5. 【NOIP2017】列队【可持久化线段树】

    题目链接 题目描述 Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有n×mn×m名学生,方阵的行数为 n ...

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

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

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

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

  8. 【BZOJ-2653】middle 可持久化线段树 + 二分

    2653: middle Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1298  Solved: 734[Submit][Status][Discu ...

  9. HDU 4866 Shooting(持久化线段树)

    view code//第二道持久化线段树,照着别人的代码慢慢敲,还是有点不理解 #include <iostream> #include <cstdio> #include & ...

随机推荐

  1. C语言100例01 PHP版(练习)

    题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 代码: for ...

  2. 简单配置 Tomcat 的 Server.xml(war包发布)

    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" ...

  3. BZOJ1037 ZJOI2008生日聚会(动态规划)

    设f[i][j][x][y]为安排了i个男孩j个女孩,后缀最大男孩-女孩数为x,最大女孩-男孩数为y的方案数.转移显然. #include<iostream> #include<cs ...

  4. hdu 1207 汉诺塔II (DP+递推)

    汉诺塔II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  5. DataBase -- Operator

    TOP子句用于规定要返回的记录的数目. SELECT TOP number | percent column_name FROM table_name LIKE操作符用于在WHERE子句中搜索列的指定 ...

  6. Ubuntu下安装LNMP之独立添加php扩展模块

    使用php的过程中,发现某个扩展没有添加,又不想重新编译php,这个时候我们就需要单独添加需要的扩展模块. 下面以mysqli扩展模块为例,具体介绍安装步骤. 1.安装mysql 具体参考:Ubunt ...

  7. shell脚本应用

    解析乱的日志文件到临时文件中,然后用awk  1004  cd /usr/local  1005  ll  1006  cd pttmsg/  1007  ll  1008  cd msgbin-2/ ...

  8. Nginx 默认配置解析

    # For more information on configuration, see: # * Official English Documentation: http://nginx.org/e ...

  9. bzoj 1500 修改区间 splay

    内个我也不知道哪儿不对,TLE了,说说思路吧 其实思路也没什么说的,就是裸的splay,对于最后一个操作 我们记下每个区间的最长前缀,最长后缀,那么最长子序列就是 前缀,后缀,左子树的后缀+右子树的前 ...

  10. python 调用Linux shell

    有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的.那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法: 1. os 模块 ...