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

 #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. OpenCV彩色图像转灰度图

    核心函数cvSplit(). #include<cv.h> #include<highgui.h> int main(int argc, char** argv) { IplI ...

  2. 【转载】Linux升级NTPD服务器-编译安装ntp-4.2.8p12与配置

    [转载]Linux升级NTPD服务器-编译安装ntp-4.2.8p12与配置 1. 系统与软件版本 1.1 系统版本 rhel6.4(Red Hat Enterprise Linux Server r ...

  3. 【PHP】- Apache设置

    Apache配置 1.首先新建一个自己的amp目录(模仿wampserver安装目录),以后的apache,mysql,php都放在此目录下. 2.下载apache 根据自己的系统下载相应的压缩包,我 ...

  4. ai学习记录

    界面:多个预编辑区:制作图形,使用的图形放到工作区内,不使用在预编区.没有Ctrl/Alt+delete的概念,没有前后景颜色.新建:分辨率:矢量软件和分辨率无关: 新建时候不要勾选对齐到像素网格 存 ...

  5. hdu 1856 More is better (并查集)

    More is better Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 327680/102400 K (Java/Others) ...

  6. BZOJ4869 [Shoi2017]相逢是问候 【扩展欧拉定理 + 线段树】

    题目链接 BZOJ4869 题解 这题调得我怀疑人生,,结果就是因为某些地方\(sb\)地忘了取模 前置题目:BZOJ3884 扩展欧拉定理: \[c^a \equiv c^{a \mod \varp ...

  7. linux管理(二)---网络使用情况的监控

    我们经常在监控服务器或者排查程序性能瓶颈时需要知道  网络带宽的使用情况,看看带宽是不是瓶颈. linux系统中监控网络的工具和命令很多. 但其实主要分2种,一种是实时监控带宽情况(速度如何),一种是 ...

  8. 【BZOJ 3505】 [Cqoi2014]数三角形 容斥原理+排列组合+GCD

    我们先把所有三角形用排列组合算出来,再把一行一列上的三点共线减去,然后我们只观察向右上的三点共线,向左上的乘二即可,我们发现我们如果枚举所有的两边点再乘中间点的个数(GCD),那么我们发现所有的两边点 ...

  9. 【BZOJ 1124】[POI2008] 枪战Maf Tarjan+树dp

    #define int long long using namespace std; signed main(){ 这个题一看就是图论题,然后我们观察他的性质,因为一个图论题如果没有什么性质,就是真· ...

  10. Angular白名单&&Angular拦截器 全局通用

    //angular 白名单全局通用 app.config([ '$compileProvider', function ($compileProvider) { $compileProvider.aH ...