玩(lay)

题目名称

你的昆特牌打的太好啦!不一会你就 \(\tt{AK}\) 了 \(\tt{NOGP}\),只能无聊地堆牌玩!

题目描述

你有一些矩形卡牌,每次你会作如下三个操作:

  1. 紧挨着最后一张牌往牌后面放一张牌,这张牌的底边与 \(X\) 轴重合且位于第一象限。(第一张牌最左边位于 \(X=0\) 处)
  2. 拿走一张牌, 并把后面的牌向前推到与前一张牌右边重合。
  3. 询问\([l , r]\)(坐标) 这一段牌最高的高度。

对于边界情况,在两张牌交界处视为最高的那张牌的高度。

输入输出可能需要加速!

输入输出格式

输入格式

第一行两个数 \(N\)、 \(C\) 表示操作数、 离线操作还是在线;

接下来 \(N\) 行每行是如下三种之一

\(T=1\),接下来 \(LEN\)、 \(H\) 分别表示插入的牌的长、高;

\(T=2\),接下来 \(X\) 表示拿走哪一张牌, 牌的编号按出现顺序由小到大, 从 \(1\) 开始(不是操作序号!), 删除的牌不会改变序号, 若序号表示的牌已被删除则不操作;

\(T=3\), 接下来 \(L\)、 \(R\) 表示询问区间; 若询问区间上没牌,输出 \(0\)。

若 \(C=1\),则上面输入中的 \(LEN\)、 \(H\)(仅这两项!) 需要以下式子算出(\(lastans\) 为最近一次询问答案,初值为 \(0\))

真实输入\(=(\)输入\(\times 2333 + lastans\times 666 )\pmod{10^8+7}+1\)。

输出格式

对每一个询问操作输出该段最高的位置高度是多少。

说明

对于\(40\%\)的数据,没有删除操作;

对于额外\(20\%\)的数据, \(C=0\);

对于\(80\%\)的数据, \(N\le 2 \times 10^5\);

对于\(100\%\)的数据, \(N \le 5\times 10^5\) , \(LEN,H\le 10^9\), \(L\)、 \(R\) 不会超过 \(10^{18}\) 范围, 输入的没有负数


并不难。

上午打了一个\(fhq\)平衡树维护,因为写了三个\(\tt{split}\)再加上第一题模拟写挂写的很烦,然后就挂了。

下午换了思路写了写线段树。

主题思路是对进入的牌的顺序建线段树,维护区间长度加和区间高度最大值

每次询问的时候现在线段树上二分一下找到询问的区间,然后再进去询问就可以了。

(结果还是写了三个\(\tt{query}\),事实上一个应该就可以了

删除插入都比较简单了。


Code:

#include <cstdio>
#define ll long long
const int N=5e5+10;
ll sum[N<<2],mx[N<<2];
#define ls id<<1
#define rs id<<1|1
ll Max(ll x,ll y){return x>y?x:y;}
void updata(int id)
{
sum[id]=sum[ls]+sum[rs];
mx[id]=Max(mx[ls],mx[rs]);
}
void change(int id,int l,int r,int p,ll d,ll h)
{
if(l==r)
{
sum[id]=d,mx[id]=h;
return;
}
int mid=l+r>>1;
if(p<=mid) change(ls,l,mid,p,d,h);
else change(rs,mid+1,r,p,d,h);
updata(id);
}
int queryL(int id,int l,int r,ll p)
{
if(l==r) return l;
int mid=l+r>>1;
if(sum[ls]<p) return queryL(rs,mid+1,r,p-sum[ls]);
else return queryL(ls,l,mid,p);
}
int queryR(int id,int l,int r,ll p)
{
if(l==r) return l;
int mid=l+r>>1;
if(sum[ls]<=p) return queryR(rs,mid+1,r,p-sum[ls]);
else return queryR(ls,l,mid,p);
}
int query(int id,int L,int R,int l,int r)
{
if(l==L&&r==R) return mx[id];
int Mid=L+R>>1;
if(r<=Mid) return query(ls,L,Mid,l,r);
else if(l>Mid) return query(rs,Mid+1,R,l,r);
else return Max(query(ls,L,Mid,l,Mid),query(rs,Mid+1,R,Mid+1,r));
}
int main()
{
int c,op,n,In=0;
scanf("%d%d",&n,&c);
ll lastans=0,LEN,H,l,r;int id;
for(int i=1;i<=n;i++)
{
scanf("%d",&op);
if(op==1)
{
scanf("%lld%lld",&LEN,&H);
if(c==1)
{
LEN=(LEN*2333+lastans*666)%100000007+1;
H=(H*2333+lastans*666)%100000007+1;
}
change(1,1,n,++In,LEN,H);
}
else if(op==3)
{
scanf("%lld%lld",&l,&r);
printf("%lld\n",lastans=query(1,1,n,queryL(1,1,n,l),queryR(1,1,n,r)));
}
else
{
scanf("%d",&id);
change(1,1,n,id,0,0);
}
}
return 0;
}

2018.11.6

玩(lay) 解题报告的更多相关文章

  1. 洛谷 P4705 玩游戏 解题报告

    P4705 玩游戏 题意:给长为\(n\)的\(\{a_i\}\)和长为\(m\)的\(\{b_i\}\),设 \[ f(x)=\sum_{k\ge 0}\sum_{i=1}^n\sum_{j=1}^ ...

  2. 「SCOI2015」小凸玩矩阵 解题报告

    「SCOI2015」小凸玩矩阵 我好沙茶啊 把点当边连接行和列,在外面二分答案跑图的匹配就行了 我最开始二分方向搞反了,样例没过. 脑袋一抽,这绝壁要费用流,连忙打了个KM 然后wa了,一想这个不是完 ...

  3. 「SCOI2015」小凸玩密室 解题报告

    「SCOI2015」小凸玩密室 虽然有心里在想一些奇奇怪怪的事情的原因,不过还是写太久了.. 不过这个题本身也挺厉害的 注意第一个被点亮的是任意选的,我最开始压根没注意到 \(dp_{i,j}\)代表 ...

  4. 【NOIP2015】提高组D1 解题报告

    P1978神奇的幻方 Accepted 描述 幻方是一种很神奇的 N ∗ N 矩阵:它由数字 1,2,3, … … , N ∗ N 构成,且每行.每列及两条对角线上的数字之和都相同. 当 N 为奇数时 ...

  5. $HNOI\ 2010$ 解题报告

    HNOI 2010 解题报告 0. HNOI2010 AC代码包下载地址 注: 戳上面的标题中的'地址' 下载 代码包, 戳下面每一题的文件名 可进入 题目链接. 每一题 对应代码的文件名 我在 每一 ...

  6. 【百度之星2014~复赛 解题报告~正解】The Query on the Tree

    声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站 ...

  7. 【百度之星2014~复赛)解题报告】The Query on the Tree

    声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站 ...

  8. USACO Section2.2 Party Lamps 解题报告 【icedream61】

    lamps解题报告------------------------------------------------------------------------------------------- ...

  9. NOIP 2018 普及组 解题报告

    目录 标题统计 题目链接 思路 代码 龙虎斗 题目链接: 思路 代码 摆渡车 题目链接: 思路 对称二叉树 题目链接 思路: 先来解释一下为毛现在才来发解题报告: 其实博主是参加过NOIP 2018普 ...

随机推荐

  1. Adobe Photoshop CC2018最新教程+某宝店铺装修教程

    PS免费教程,ps淘宝店铺装修教程.该资源为本人从某商网站重金买来,现免费分享给大家,下载地址:百度网盘,https://pan.baidu.com/s/127PjFbGwVVUVce1litHFsw

  2. NO.01---今天聊聊Vuex的简单入门

    作为一款个人认为非常牛x的框架,个人使用起来得心应手,所以近期就记录一下这款框架吧. 首先说一说 Vuex 是什么? 官方给出的解释:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它 ...

  3. 【第一章】Shell 概述

    一.什么是Shell? shell是一个命令解释器,它不仅包含大量的命令以实现操作系统的对话,还可以实现定义变量.条件判断.循环控制.函数调用等功能. 作用:解释执行用户输入的命令及程序等. 从键盘输 ...

  4. 使用open live writee写的博客

    1. 安装包 下载链接:open live writer 2. 安装及使用教程 学习教程(转载他人) 3. 插入个图片 4. 写段代码 写不了,插件用不了 5. 插件使用: 参考文章:(http:// ...

  5. [知识库:python-tornado]异步调用中的上下文控制Tornado stack context

    异步调用中的上下文控制Tornado stack context https://www.zouyesheng.com/context-in-async-env.html 这篇文章真心不错, 非常透彻 ...

  6. nodejs笔记--与MongoDB的交互篇(七)

    原文地址:http://www.cnblogs.com/zhongweiv/p/node_mongodb.html 目录 简介 MongoDB安装(windows) MongoDB基本语法和操作入门( ...

  7. The Uncle_b's First Love

    Description ACM成立大会之后,uncle_b被其中一个大一女孩深深地吸引,但腼腆的B叔又不知道如何去表达自己内心的想法,经calmound神的指导,B叔决定写封情书给对方.他从Tamar ...

  8. 20145214 《Java程序设计》第4周学习总结

    20145214 <Java程序设计>第4周学习总结 教材学习内容总结 继承 继承基本上就是避免多个类间重复定义共同行为.要避免在程序设计上出现重复,可以把相同的程序代码提升为父类. 关键 ...

  9. JavaBean中DAO设计模式简介

    一.信息系统的开发架构 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/Ser ...

  10. (三)java字符串

    不可变字符串 Java没有字符串类型,而是提供了一个预定义类String. java中的字符串是不可变字符串,因此无法更改某一个字符串变量的内容. 优点:编译器可以让字符串共享.当复制一个字符串时,原 ...