题目描述

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

备注:

1<=N,C,Q<=1e5

1<=X,Y<=C,1<=A,B<=1e8

A,B通过随机产生

思路:

因每次更改对于一整个区间赋为相同的值因此可以用lazy标记某一块中是否全部为相同的值,每次分裂合并时进行查询。

分块,维护区间中某值出现的次数。

#include <math.h>
#include <algorithm>
#include <stdio.h>
#include <set>
#include <map>
#include <string.h>
#include <string>
#include<iostream>
using namespace std;
const int M=1e5+100;
int a[M];
int B,belong[M],lazy[M],r[M],l[M],num;
//map<int,int>mp[M];
int sum[M];//记录某值在序列中出现的次数
void build(int n)
{B=sqrt(n);num=n/B;if(n%B){num++;}for(int i=1;i<=num;i++){l[i]=B*(i-1)+1;r[i]=B*i;}r[num]=n;for(int i=1;i<=num;i++){lazy[i]=-1;for(int j=l[i];j<=r[i];j++){belong[j]=i;a[j]=1;}}sum[1]=n;
}
void push_down(int x)//在更新跟查找时,如果要进入某一段,首先释放lazy标记,然后在再区间中查找
{if(lazy[x]!=-1){for(int i=l[x];i<=r[x];i++){a[i]=lazy[x];}lazy[x]=-1;}
}
void update(int x,int y,int v)
{if(belong[x]==belong[y]){if(lazy[belong[x]]!=-1)push_down(belong[x]);for(int i=x;i<=y;i++){sum[a[i]]--;sum[v]++;a[i]=v;}}else{int b_st=belong[x];if(lazy[b_st]!=-1)push_down(b_st);for(int i=x;i<=r[b_st];i++){sum[a[i]]--;sum[v]++;a[i]=v;}for(b_st++;b_st<belong[y];b_st++){if(lazy[b_st]!=-1){if(lazy[b_st]!=v){sum[lazy[b_st]]-=B;sum[v]+=B;lazy[b_st]=v;}}else{for(int j=l[b_st];j<=r[b_st];j++){if(a[j]!=v){sum[a[j]]--;sum[v]++;a[j]=v;}}lazy[b_st]=v;}}if(lazy[b_st]!=-1)push_down(b_st);// int ed=min(r,n);for(int i=l[b_st];i<=y;i++){sum[a[i]]--;sum[v]++;a[i]=v;}}
}
//int query(int x)
//{
//    int sum=0;
//    for(int i=1;i<=num;i++)
//    {
//     if(lazy[i]!=-1)
//     {
//         push_down(i);
//     }
//     sum+=mp[i][x];
//    }
//    return sum;
//}
int main()
{int n,m,q;cin>>n>>m>>q;build(n);int x,y;long long  aa,bb;while(q--){scanf("%d%d%lld%lld",&x,&y,&aa,&bb);aa%=n;bb%=n;long long   p=sum[x];long long ll=(aa+((p+bb)*(p+bb))%(long long)n)%n+1;long long  rr=(aa+((p*bb)%n*(p*bb)%n)%(long long)n)%n+1;if(ll>rr)swap(ll,rr);update(ll,rr,y);}int maxn=0;for(int i=1;i<=m;i++){if(sum[i]>maxn)maxn=sum[i];}cout<<maxn<<endl;return 0;
}

牛客网练习赛36 Ribbit的数列 分块相关推荐

  1. 牛客网 斐波那契数列

    剑指offer 牛客网 斐波那契数列 # -*- coding: utf-8 -*- """ Created on Mon Apr 8 15:35:14 2019@aut ...

  2. 牛客网-斐波那契数列

    牛客网编程题–>大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0),其中n<=39. 用递归结构写斐波那契数列. #include < ...

  3. 牛客网练习赛26B(简单的dp)

    题目链接:https://www.nowcoder.com/acm/contest/180/B 链接:https://www.nowcoder.com/acm/contest/180/B 来源:牛客网 ...

  4. 牛客网练习赛34-A题

    题目https://ac.nowcoder.com/acm/contest/297/A链接 链接:https://ac.nowcoder.com/acm/contest/297/A 来源:牛客网 不知 ...

  5. 牛客网练习赛34-b题

    题目链接https://ac.nowcoder.com/acm/contest/297/B 链接:https://ac.nowcoder.com/acm/contest/297/A?&head ...

  6. 牛客网练习赛15__吉姆的奇思妙想

    吉姆的奇思妙想 题目描述 吉姆是个热爱算法竞赛的小朋友,平常的休闲活动就是刷 牛客网 的题目. 当吉姆刷到  wannafly挑战赛12 F.小H和圣诞树  这题时,颇为震惊,因为这是他第一次在wan ...

  7. 牛客网_PAT乙级_1020完美数列(25)【vector sort 最后一个测试用例超时】

    题目描述 给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列. 现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完 ...

  8. 牛客网练习赛44-B(快速幂+模拟)

    题目链接:https://ac.nowcoder.com/acm/contest/548/B 题意:计算m/n小数点后k1位到k2位,1≤m≤n≤109,1<=k1<=k2<=109 ...

  9. 牛客网练习赛7--购物 动态规划

    题意: 在遥远的东方,有一家糖果专卖店. 这家糖果店将会在每天出售一些糖果,它每天都会生产出m个糖果,第i天的第j个糖果价格为C[i][j]元. 现在的你想要在接下来的n天去糖果店进行选购,你每天可以 ...

最新文章

  1. 如何将加密PDF转换成Word文档
  2. 为了方便大家下载四级资料,开通FTP
  3. 机器学习入门必备的13张“小抄”(附下载)
  4. 播放RTMP协议的流媒体的几种选择 1
  5. mysql git下载安装_xshell、python、git、mysql安装(玩阿里云的第二天)
  6. Python中数据类型转换
  7. java多线程的同步控制_Java多线程并发控制工具信号量Semaphore,实现原理及案例...
  8. rabbitmq 笔记
  9. HttpClient如何解决302重定向问题
  10. 高数18讲 之基础知识
  11. 2012年5月16日,Google发布“知识图谱(Knowledge Graph)”
  12. 正点原子STM32F4探索者开发板HAL库TFT LCD屏幕例程移植到STM32CubeMX+CLion
  13. 冒泡、选择和插入排序图解详细分析
  14. 5G无线技术基础自学系列 | 网络架构
  15. 为什么电脑总是弹出“拨号连接”界面?
  16. redis通配符批量删除keys——del
  17. 小程序获取微信运动步数
  18. MDWechat(微信美化)免费
  19. Microsoft SQL Server 2008 MDX Step by Step中关于MDX Step-by-Step.abf损坏文件的处理
  20. 【D3.js 学习总结】12、D3布局-集群图

热门文章

  1. 不断突破道,用道来挣钱才能长稳,才能心安!
  2. ei指什么_EI是什么
  3. WPS怎么在线转换成Word,WPS转换成Word的操作步骤
  4. 笔者在国庆期间发文的感概:思绪万千
  5. gcc:扩展功能:除标准里定义的C特性之外的功能;-pedantic
  6. iphone 自定义铃声制作
  7. 浅谈二维码门禁在互联网的时代特色
  8. 剑指Offer:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法
  9. vue电商后台管理系统--订单管理篇
  10. 计算机科学报数学竞赛,五大学科竞赛参加哪一个科目?五大学科竞赛赛程设置分析!...