牛客 Rabbit的数列 (线段树维护值为x的个数+区间覆盖)
https://ac.nowcoder.com/acm/contest/907/C
链接:https://ac.nowcoder.com/acm/contest/907/C
来源:牛客网
题目描述
初始时数列中每个数均为1,现在Rabbit要对这个数列进行Q次操作,每次操作给出四个数:X Y A B,首先查询数列中值为X的个数P,然后计算出L,R:
L=(A+(P+B)2)mod N
R=(A+(P∗B)2)mod N
并将范围[min(L,R),max(L,R)]内的所有数改为Y。
最后询问经过Q次操作后数列中出现次数最多的那个数出现了几次。
输入描述:
第一行三个整数N,C,Q。 接下来Q行,每行四个整数X,Y,A,B,表示一个操作。
输出描述:
输出一个整数,表示经过Q次操作后数列中出现次数最多的那个数出现的次数。
输出
2 分析:我们可以维护一个区间最大最小值,这样就可以在log的时间内知道值为x 的个数有多少的 。因为mn[x]=mx[x] 表示这个区间都为Y,故无需在向下查找
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+;
typedef long long ll;
int vis[maxn];
int lazy[maxn*],mx[maxn*],mn[maxn*]; void pushdown(int id,int l,int r)
{
if(lazy[id])
{
mx[id]=mn[id]=lazy[id];
if(l!=r)
{
lazy[id<<|]=lazy[id<<]=lazy[id];
mx[id<<]=mx[id<<|]=lazy[id];
mn[id<<]=mn[id<<|]=lazy[id];
}
lazy[id]=;
}
}
void update(int id,int l,int r,int ql,int qr,int v)
{
pushdown(id,l,r);
if(ql<=l&&r<=qr&&mx[id]==mn[id])
{
vis[mx[id]]-=(r-l+);
vis[v]+=(r-l+);
lazy[id]=v;
pushdown(id,l,r);
return ;
}
int mid=(l+r)>>;
if(ql<=mid) update(id<<,l,mid,ql,qr,v);
if(qr>mid) update(id<<|,mid+,r,ql,qr,v);
mx[id]=max(mx[id<<],mx[id<<|]);
mn[id]=min(mn[id<<],mn[id<<|]);
}
int main()
{ int n,c,q,x,y;
ll a,b;
scanf("%d%d%d",&n,&c,&q);
// memset(mn,1,sizeof(mn));
// memset(mx,1,sizeof(mx));
vis[]=n;
lazy[]=;
while(q--)
{
scanf("%d%d%lld%lld",&x,&y,&a,&b);
int p=vis[x];
int l=(a+(p+b)%n*(p+b)%n)%n+;
int r=(a+p*b%n*p%n*b%n)%n+;
if(l>r) swap(l,r);
update(,,n,l,r,y);
}
int ans=;
for(int i=;i<=c;i++)
ans=max(ans,vis[i]);
printf("%d\n",ans);
}
牛客 Rabbit的数列 (线段树维护值为x的个数+区间覆盖)的更多相关文章
- 牛客练习赛28-B(线段树,区间更新)
牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, 1 l r 询问区间[l,r]内的元素和 2 l r 询问区间[l,r]内的 ...
- DP+线段树维护矩阵(2019牛客暑期多校训练营(第二场))--MAZE
题意:https://ac.nowcoder.com/acm/contest/882/E 给你01矩阵,有两种操作:1是把一个位置0变1.1变0,2是问你从第一行i开始,到最后一行j有几种走法.你只能 ...
- 2019牛客暑期多校训练营(第二场)E 线段树维护dp转移矩阵
题意 给一个\(n\times m\)的01矩阵,1代表有墙,否则没有,每一步可以从\(b[i][j]\)走到\(b[i+1][j]\),\(b[i][j-1]\),\(b[i][j+1]\),有两种 ...
- 牛客多校第十场 F Popping Balloons 线段树维护稀疏矩阵
题意: 给定一个稀疏矩阵,里面有若干个气球,让你横着开三枪,竖着开三枪,问最多能打爆多少气球,要求相同方向,相邻两枪必须间隔r. 题解: 横向记录每列有多少个气球,分别在哪行上. 然后把这个数据改造成 ...
- Wannafly挑战赛22 D 整数序列 (线段树维护三角函数值)
链接:https://ac.nowcoder.com/acm/contest/160/D 来源:牛客网 整数序列 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语 ...
- [动态dp]线段树维护转移矩阵
背景:czy上课讲了新知识,从未见到过,总结一下. 所谓动态dp,是在动态规划的基础上,需要维护一些修改操作的算法. 这类题目分为如下三个步骤:(都是对于常系数齐次递推问题) 1先不考虑修改,不考虑区 ...
- 线段树维护矩阵【CF718C】 Sasha and Array
Description 有一个长为\(n\)的数列\(a_{1},a_{2}...a_{n}\),你需要对这个数列维护如下两种操作: \(1\space l \space r\space x\) 表示 ...
- 51nod 1376【线段树维护区间最大值】
引自:wonter巨巨的博客 定义 dp[i] := 以数字 i(不是下标 i)为结尾的最长上升长度 然后用线段树维护 dp[i]: 每个节点维护 2 个信息,一个是当前区间的最大上升长度,一个是最大 ...
- Codeforces 446C - DZY Loves Fibonacci Numbers(斐波那契数列+线段树)
Codeforces 题目传送门 & 洛谷题目传送门 你可能会疑惑我为什么要写 *2400 的题的题解 首先一个很明显的想法是,看到斐波那契数列和 \(10^9+9\) 就想到通项公式,\(F ...
随机推荐
- pyAudioAnalysis-audioFeatureExtraction 错误纠正
1. TypeError: mfccInitFilterBanks() takes 2 positional arguments but 7 were given The issue In the f ...
- Ansible安装配置(CentOS 7)
Ansible 中的概念 任务 Task——多个 Task 顺序执行,在每个 Task 执行结束可以通知 Hanlder 触发新操作. 变量 Variable——用户定义的变量. 环境 Facts—— ...
- OuterXml和InnerXml(2)
官方例子:https://msdn.microsoft.com/en-us/library/system.xml.xmlnode.outerxml.aspx using System; using S ...
- spring-data-redis的使用/redis缓存
1.导入依赖 <properties> <junit.version>4.12</junit.version> <spring.version>4.2. ...
- BZOJ1185[HNOI2007] 最小矩形覆盖(旋转卡壳)
BZOJ1185[HNOI2007] 最小矩形覆盖 题面 给定一些点的坐标,要求求能够覆盖所有点的最小面积的矩形,输出所求矩形的面积和四个顶点的坐标 分析 首先可以先求凸包,因为覆盖了凸包上的顶点,凸 ...
- Python 3实现网页爬虫
1 什么是网页爬虫 网络爬虫( 网页蜘蛛,网络机器人,网页追逐者,自动索引,模拟程序)是一种按照一定的规则自动地抓取互联网信息的程序或者脚本,从互联网上抓取对于我们有价值的信息.Tips:自动提取网页 ...
- github(1):
1.目的:借助github托管项目带按摩 2.仓库:创建一个Repository 3.收藏(Start):仓库主页start按钮,意思是收藏项目的人数,在github上如果有一个项目获得100个sta ...
- sftp没有关闭session导致服务器sshd进程未关闭
项目中需要用Sftp上传下载文件,通过jsch中的sftp实现.代码上了服务器之后,发觉服务器多了很多进程没有被关闭. 连接sftp代码: protected boolean connectToSer ...
- 不想用ubuntu了,换个系统manjaro - change
# 下载 https://mirrors.tuna.tsinghua.edu.cn/osdn/storage/g/m/ma/manjaro/xfce/ # usb启动盘 rufus # 中文字体 pa ...
- Sql中使用Case when
SELECT CASE WHEN Column IS NOT NULL THEN '情况1' ELSE '情况2' END AS '列名' , FROM dbo.Table