https://ac.nowcoder.com/acm/contest/907/C

链接:https://ac.nowcoder.com/acm/contest/907/C
来源:牛客网

题目描述

Rabbit得到了一个长度为N的数列(数列编号从0到N−1)。数列中每个数vali满足1<=vali<=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次操作后数列中出现次数最多的那个数出现的次数。
示例1

输入

复制

4 2 1
2 2 1 1

输出

复制

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的个数+区间覆盖)的更多相关文章

  1. 牛客练习赛28-B(线段树,区间更新)

    牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ ​ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, ​ 1 l r 询问区间[l,r]内的元素和 ​ 2 l r 询问区间[l,r]内的 ...

  2. DP+线段树维护矩阵(2019牛客暑期多校训练营(第二场))--MAZE

    题意:https://ac.nowcoder.com/acm/contest/882/E 给你01矩阵,有两种操作:1是把一个位置0变1.1变0,2是问你从第一行i开始,到最后一行j有几种走法.你只能 ...

  3. 2019牛客暑期多校训练营(第二场)E 线段树维护dp转移矩阵

    题意 给一个\(n\times m\)的01矩阵,1代表有墙,否则没有,每一步可以从\(b[i][j]\)走到\(b[i+1][j]\),\(b[i][j-1]\),\(b[i][j+1]\),有两种 ...

  4. 牛客多校第十场 F Popping Balloons 线段树维护稀疏矩阵

    题意: 给定一个稀疏矩阵,里面有若干个气球,让你横着开三枪,竖着开三枪,问最多能打爆多少气球,要求相同方向,相邻两枪必须间隔r. 题解: 横向记录每列有多少个气球,分别在哪行上. 然后把这个数据改造成 ...

  5. Wannafly挑战赛22 D 整数序列 (线段树维护三角函数值)

    链接:https://ac.nowcoder.com/acm/contest/160/D 来源:牛客网 整数序列 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语 ...

  6. [动态dp]线段树维护转移矩阵

    背景:czy上课讲了新知识,从未见到过,总结一下. 所谓动态dp,是在动态规划的基础上,需要维护一些修改操作的算法. 这类题目分为如下三个步骤:(都是对于常系数齐次递推问题) 1先不考虑修改,不考虑区 ...

  7. 线段树维护矩阵【CF718C】 Sasha and Array

    Description 有一个长为\(n\)的数列\(a_{1},a_{2}...a_{n}\),你需要对这个数列维护如下两种操作: \(1\space l \space r\space x\) 表示 ...

  8. 51nod 1376【线段树维护区间最大值】

    引自:wonter巨巨的博客 定义 dp[i] := 以数字 i(不是下标 i)为结尾的最长上升长度 然后用线段树维护 dp[i]: 每个节点维护 2 个信息,一个是当前区间的最大上升长度,一个是最大 ...

  9. Codeforces 446C - DZY Loves Fibonacci Numbers(斐波那契数列+线段树)

    Codeforces 题目传送门 & 洛谷题目传送门 你可能会疑惑我为什么要写 *2400 的题的题解 首先一个很明显的想法是,看到斐波那契数列和 \(10^9+9\) 就想到通项公式,\(F ...

随机推荐

  1. Windows DiskPart

    win+r打开运行窗口,输入diskpart命令,按回车键或点击确定按钮即可打开如下所示界面: 输入help可以打印帮助信息 List Disk:显示本机的所有磁盘,以便正确操作目标磁盘 Select ...

  2. 000 (H5*) 知识点总结

    https://note.youdao.com/ynoteshare1/index.html?id=ff02e616917fba868f39241c8383d7c7&type=note 目录 ...

  3. python基础-2 编码转换 pycharm 配置 运算符 基本数据类型int str list tupple dict for循环 enumerate序列方法 range和xrange

    1.编码转换 unicode 可以编译成 UTF-U GBK 即 #!/usr/bin/env python # -*- coding:utf-8 -*- a = '测试字符' #默认是utf-8 a ...

  4. HDUSTOJ-1558 Flooring Tiles(反素数)

    1558: Flooring Tiles 时间限制: 3 Sec  内存限制: 128 MB提交: 59  解决: 36[提交][状态][讨论版] 题目描述 You want to decorate ...

  5. Leetcode Lect7 哈希表

    传统的哈希表 对于长度为n的哈希表,它的存储过程如下: 根据 key 计算出它的哈希值 h=hash(key) 假设箱子的个数为 n,那么这个键值对应该放在第 (h % n) 个箱子中 如果该箱子中已 ...

  6. tomcat闪屏是jdk JAVA_HOEM环境变量配置问题

    JAVA_HOME=D:\jdk.18

  7. MongoDB的使用学习之(三)安装MongoDB以及一些基础操作

    原文链接:http://www.cnblogs.com/huangxincheng/archive/2012/02/18/2356595.html 此博主的 8天学通MongoDB 系列还是不错的,本 ...

  8. jQuery学习总结02-属性

    1.attr(name|properties|key,value|fn) 说明:设置和返回被选元素的属性值 示例: 参数: name(属性名称) string properties(作为属性的'名/值 ...

  9. vim插件YouCompleteMe安装

    这里在ubuntu16.4下安装的需要提前安装cmake clang python3sudo apt-get install clang  因为不能访问google,安装时,安装go的插件会访问goo ...

  10. Maya2019下载安装与激活

    目录 1. 更多推荐 2. 下载地址 2.1. OneDrive 2.2. Window (64位) 2.3. MAC_OSX 3. 安装激活教程 1. 更多推荐 其他Maya版本的下载与激活:htt ...