很简单

用一个线段树维护

1.答案

2.当前栈顶是什么时候push进来的

然后用一棵以时间为版本的可持久化线段树维护每个操作之后第一个覆盖到他的操作是哪个

就可以了

询问直接在线段树上询问,修改在两棵树上分别修改即可

调一年

//wls niubi!
#include<bits/stdc++.h>
#define LL long long
using namespace std;
inline int read()
{int x = 0,f = 1;char ch = getchar();for(;!isdigit(ch);ch = getchar())if(ch == '-')f = -f;for(;isdigit(ch);ch = getchar())x = 10 * x + ch - '0';return x * f;
}
const int maxn = 500010;
int n,m,ty,rt;
int tot;
int dfn,root[maxn],ls[maxn << 7],rs[maxn << 7],val[maxn << 7],tag[maxn << 7],w[maxn];
inline void pushdown(int x,int l,int r)
{if(l == r || !tag[x])return;int t = tag[x],mid = (l + r) >> 1;tag[x] = 0;if(!ls[x])ls[x] = ++dfn;if(!rs[x])rs[x] = ++dfn;tag[ls[x]] = tag[rs[x]] = t;val[ls[x]] = w[t] * (mid - l + 1);val[rs[x]] = w[t] * (r - mid);
}
inline int query(int x,int l,int r,int L,int R)
{if(!x)return 0;pushdown(x,l,r);if(L <= l && r <= R)return val[x];int mid = (l + r) >> 1,ans = 0;if(L <= mid)ans += query(ls[x],l,mid,L,R);if(R > mid)ans += query(rs[x],mid + 1,r,L,R);return ans;/*if(R <= mid)return query(ls[x],l,mid,L,R);else if(L > mid)return query(rs[x],mid + 1,r,L,R);else return query(ls[x],l,mid,L,R) + query(rs[x],mid + 1,r,L,R);*/
}
inline int qid_1(int x,int l,int r,int p)
{if(tag[x])return tag[x];if(l == r)return tag[x];int mid = (l + r) >> 1;if(p <= mid)return qid_1(ls[x],l,mid,p);else return qid_1(rs[x],mid + 1,r,p);
}
inline int qid_2(int x,int l,int r,int p)
{pushdown(x,l,r);if(l == r)return tag[x];int mid = (l + r) >> 1;if(p <= mid)return qid_2(ls[x],l,mid,p);else return qid_2(rs[x],mid + 1,r,p);
}
inline void modify(int &x,int l,int r,int L,int R,int va)
{if(!x)x = ++dfn;pushdown(x,l,r);if(L <= l && r <= R){tag[x] = va;val[x] = (r - l + 1) * w[va];return;}int mid = (l + r) >> 1;if(L <= mid)modify(ls[x],l,mid,L,R,va);if(R > mid)modify(rs[x],mid + 1,r,L,R,va);val[x] = val[ls[x]] + val[rs[x]];
}
inline void Cpushdown(int x)
{if(!tag[x])return;int v = tag[x],tmp;tag[x] = 0;tmp = ls[x],ls[x] = ++dfn;ls[ls[x]] = ls[tmp],rs[ls[x]] = rs[tmp],tag[ls[x]] = tag[tmp],val[ls[x]] = val[tmp];tmp = rs[x],rs[x] = ++dfn;ls[rs[x]] = ls[tmp],rs[rs[x]] = rs[tmp],tag[rs[x]] = tag[tmp],val[rs[x]] = val[tmp];tag[ls[x]] = tag[rs[x]] = v;
}
inline void insert(int &x,int l,int r,int L,int R,int va,int flg)
{if(flg){int p = x;x = ++dfn;ls[x] = ls[p],rs[x] = rs[p],tag[x] = tag[p],val[x] = val[p];}flg = 1;if(l < r && tag[x])Cpushdown(x),flg = 0;if(L <= l && r <= R){tag[x] = va;return;}int mid = (l + r) >> 1;if(L <= mid)insert(ls[x],l,mid,L,R,va,flg);if(R > mid)insert(rs[x],mid + 1,r,L,R,va,flg);
}
int main()
{n=read();m=read();ty=read();int ans=0;while(m--){int op=read();if (op==1){int l=(read()+ans*ty)%n+1,r=(read()+ans*ty)%n+1;if (l>r) swap(l,r);printf("%d\n",ans=query(rt,1,n,l,r));}else if (op==2){int l=(read()+ans*ty)%n+1,id=qid_2(rt,1,n,l);id=qid_1(root[id-1],1,n,l);modify(rt,1,n,l,l,id);tot++;root[tot]=root[tot-1];insert(root[tot],1,n,l,l,id,1);}else{int l=(read()+ans*ty)%n+1,r=(read()+ans*ty)%n+1,x=read();if (l>r) swap(l,r);tot++;w[tot]=x;root[tot]=root[tot-1];insert(root[tot],1,n,l,r,tot,1);modify(rt,1,n,l,r,tot);}}
}

View Code

转载于:https://www.cnblogs.com/Kong-Ruo/p/9676129.html

UNR #1 火车管理相关推荐

  1. UOJ#218. 【UNR #1】火车管理 线段树 主席树

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ218.html 题解 如果我们可以知道每次弹出栈之后新的栈顶是什么,那么我们就可以在一棵区间覆盖.区间求和 ...

  2. 【UNR #1】火车管理

    SOL: 可持久化数据结构了解一下. #include<bits/stdc++.h> #define N 4000021 #define M (N*25) #define Mid (l+r ...

  3. html5 video js控制摄像头的焦距,html 通过input video canvas 打开摄像头 定制相机

    在机缘巧合之下,了解到用HTML5和javascript调用摄像头来实现拍照功能,今天就把大致原理写下来.页面布局很简单,就是一个input标签,两个HTML5元素video.canvas和一个but ...

  4. C++类和对象(三)

    文章目录 再谈构造函数 构造函数体赋值 初始化列表 explicit关键字 static成员 概念 特性 C++11中成员初始化的新玩法 友元 友元函数 友元类 内部类 概念 特性 再次理解封装 再次 ...

  5. C++类与对象再升华

    C++类与对象升华补充 1. 再谈构造函数 1.1 初始化列表 1.2 explicit关键字 2. static成员 2.1 特性 3. C++11的成员初始化新玩法 4. 友元 4.1 友元函数 ...

  6. java web 火车票预定系统 完整源码 下载直接运行

    今天为大家分享一个java web编写的火车票系统,目前系统功能已经完善,后续会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步. 开发环境 开发 ...

  7. java火车票售票系统,火车购票系统,系统实现了用户会员管理、火车车次管理、火车座位管理、系统公告管理、火车票退票、火车票换乘、换乘查询、直达查询、乘车人管理、订单管理、个人中心管理等

    火车票售票系统 java火车票售票系统,系统实现了用户会员管理.火车车次管理.火车座位管理.系统公告管理.火车票退票.火车票换乘.换乘查询.直达查询.乘车人管理.订单管理.个人中心管理等. 数据库采用 ...

  8. 常用的五大bug管理工具的优缺点和下载地址_前进的火车_新浪博客

    1. QC(Quality Center) 是原Mercury Interactive公司(现已被HP收购)生产的企业级基于WEB测试管理工具,需要安装配置IIS和数据库,系统资源消耗比较大:功能很强 ...

  9. Worktile CTO 管理经验分享:如何在研发团队落地OKR?研发团队目标如何管理?

    OKR作为一套明确和跟踪目标及其完成情况的管理工具和方法,受到越来越多的企业关注,最近就有一条关于90后小伙使用OKR工作法进行养猪的视频火遍全网,可以看到使用OKR工作法进行目标管理不仅仅只是适用于 ...

最新文章

  1. serverless mysql_Serverless 解惑——函数计算如何访问 MySQL 数据库
  2. 怎么学python-没有任何基础的人,该如何学习Python?「附具体步骤」
  3. Redux入门之实现一个迷你版的Redux
  4. ReactOS调试之fDebug
  5. dovecot vsz_limit参造成foxmail、outlook等客户端工具接收邮件有时候报错
  6. 选购一台计算机得出三条建议,如何挑选一台适合你的电脑?了解这几项配置即可!...
  7. C#中泛型在Class上的实现
  8. 个人工作总结04(冲刺二)
  9. Android中的NavigationView
  10. 关于传奇MapInfo地图文件参数详细说明
  11. 旁路电容0.1uF,是怎么来的?
  12. 用matlab对图像进行二维傅里叶变换
  13. 7款ui设计开发初学者必学的设计软件
  14. Android Performance之工具篇(1)-systrace
  15. android 友盟统计功能,Android应用中添加友盟统计
  16. [服务器]Windows server 2008 R2远程桌面授权破解方法
  17. 前端模型--css动画(旋转八音盒)
  18. [CTS2019]氪金手游(容斥+树形背包DP)
  19. php获取本机内网ip地址
  20. 随机过程(2)__马尔可夫链的主要性质__查普曼-科莫高洛夫方程

热门文章

  1. 清默网络——CCIE考试经验与心得(1)
  2. kodi教程_kodi下载使用教程教学
  3. Java接口继承接口
  4. 一战赚了1090亿,恐怖的张一鸣!
  5. nodejs安装npm依赖时报错
  6. libusb介绍及简单使用
  7. Linux环境Hadoop的下载安装
  8. Linux创建普通用户
  9. win2008 R2 安装VS2003
  10. 清理qmail邮件队列