点此看题面

大致题意: 有单点赋值、全局加法、全局乘法、全局赋值、单点求值、全局求和\(6\)种操作。现在给出操作序列,以及\(t\)对正整数\(a_i,b_i\)。让你处理\(t*q\)次操作,每次为操作序列中的第\(((a_i+jb_i)\%q+1)\)个操作。输出询问答案和。

模拟

这是一道很水的模拟题吧。

容易发现所有操作都可以\(O(1)\)搞,因此直接\(O(tq)\)暴力即可。

就是打标记比较烦。

还有\(n\)比较大可以把操作的位置离散化。

代码

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define N 100000
#define X 10000019
#define INF 1e9
#define MOD(x) (x=(x%X+X)%X)
#define Inc(x,y) ((x+=(y))>=X&&(x-=X))
using namespace std;
int n,q,t,dc,a[N+5],b[N+5],tx[N+5],ty[N+5],dv[N+5],Inv[X+5];
struct Op {int op,x,y;I Op(CI o=0,CI a=0,CI b=0):op(o),x(a),y(b){}} o[N+5];
class FastIO
{
private:
#define FS 100000
#define tc() (A==B&&(B=(A=FI)+fread(FI,1,FS,stdin),A==B)?EOF:*A++)
#define tn (x<<3)+(x<<1)
#define D isdigit(c=tc())
int f;char c,*A,*B,FI[FS];
public:
I FastIO() {A=B=FI;}
Tp I void read(Ty& x) {x=0,f=1;W(!D) f=c^'-'?1:-1;W(x=tn+(c&15),D);x*=f;}
Ts I void read(Ty& x,Ar&... y) {read(x),read(y...);}
}F;
I int XSum(CI x,CI y) {return x+y>=X?x+y-X:x+y;}
int main()
{
RI i,j,k,op,x,y;F.read(n,q),MOD(n);
for(Inv[1]=1,i=2;i^X;++i) Inv[i]=1LL*(X-1)*Inv[X%i]%X*(X/i)%X;//线性求逆元
for(i=1;i<=q;++i) F.read(op),op^6?(F.read(x),op^1?y=0:(F.read(y),0)):x=0,//读入并存储操作
o[i]=Op(op,x,y),(o[i].op==1||o[i].op==5)&&(dv[++dc]=o[i].x),//存储下操作位置
o[i].op==1&&MOD(o[i].y),o[i].op>=2&&o[i].op<=4&&MOD(o[i].x);//将值取模,便于后续操作
for(sort(dv+1,dv+dc+1),dc=unique(dv+1,dv+dc+1)-dv-1,i=1;i<=q;++i)//离散化
(o[i].op==1||o[i].op==5)&&(o[i].x=lower_bound(dv+1,dv+dc+1,o[i].x)-dv);
for(F.read(t),i=1;i<=t;++i) F.read(tx[i],ty[i]);//读入
RI ans=0,sum=0,fmul=1,fadd=0,fval=0,ftime=0;//ans统计答案,sum记录全局和,fmul记录乘法标记,fadd记录加法标记,fval记录赋值标记,ftime记录赋值时间
#define P(x) (b[x]<ftime?fval:a[x])//若单点赋值时间在全局赋值之前,采用全局赋值的值,否则采用单点赋值的值
#define GV(x) XSum(1LL*fmul*(x)%X,fadd)//求出实际值
#define IGV(x) (1LL*XSum(x,X-fadd)*Inv[fmul]%X)//求出数组中的值
for(i=1;i<=t;++i) for(j=1;j<=q;++j) switch(o[k=(tx[i]+1LL*j*ty[i]%q)%q+1].op)
{
case 1:
Inc(sum,X-GV(P(o[k].x))),Inc(sum,o[k].y),//更新sum
a[o[k].x]=IGV(o[k].y),b[o[k].x]=i*q+j;//更新数组中的值
break;
case 2:Inc(sum,1LL*o[k].x*n%X),Inc(fadd,o[k].x);break;//更新
case 3:sum=1LL*sum*o[k].x%X,fmul=1LL*fmul*o[k].x%X,fadd=1LL*fadd*o[k].x%X;break;//更新
case 4:sum=1LL*n*o[k].x%X,fmul=1,fadd=0,fval=o[k].x,ftime=i*q+j;break;//赋值,注意清空乘法和加法标记
case 5:Inc(ans,GV(P(o[k].x)));break;case 6:Inc(ans,sum);break;//求值
}return printf("%d",ans),0;
}

【洛谷5358】[SDOI2019] 快速查询(模拟)的更多相关文章

  1. [SDOI2019]快速查询——模拟

    题目链接: [SDOI2019]快速查询 对于整个序列维护一个标记$(k,b)$表示序列的每个数的真实值为$k*a_{i}+b$(注意要实时维护$k$的逆元),并记录序列的和. 对于单点修改,将$a_ ...

  2. 洛谷 P5594 【XR-4】模拟赛

    洛谷 P5594 [XR-4]模拟赛 洛谷传送门 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OI ...

  3. [SDOI2019]快速查询

    [SDOI2019]快速查询 [题目链接] 链接 [思路要点] 据说是 \(\text{SDOI2019}\) 最水的题 操作次数为 \(1e7\) 范围,显然要求每次操作 \(\mathcal{O} ...

  4. 洛谷P3434 [POI2006]KRA-The Disks [模拟]

    题目传送门 KRA 题目描述 For his birthday present little Johnny has received from his parents a new plaything ...

  5. 【题解】洛谷P3952 [NOIP2017TG] 时间复杂度(模拟)

    题目来源:洛谷P3952 思路 纯模拟没啥可说的了 果然好复杂 参考了你谷一个40行代码 代码 #include<iostream> #include<cstdio> #inc ...

  6. luogu P5358 [SDOI2019]快速查询【模拟(?)】

    把有单点修改和查询的点离散进一个数组,然后单点修改直接改,记录一个修改时间t,维护一个sm表示这些离散的点的和,val表示出了离散点其他点的值,因为都是一样的所以只记录这一个值即可,记录ljlc为加法 ...

  7. 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】

    U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...

  8. 洛谷 P3955 图书管理员【模拟/思维】

    题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个正整数.如果一本书的图 书编码恰好以读者的需求码结尾,那 ...

  9. 洛谷P1039 侦探推理(模拟)

    侦探推理 题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情 ...

随机推荐

  1. java排序算法(持续更新)

    package exception; import java.util.Arrays; public class Sort { public static void main(String[] arg ...

  2. msyql分区与分库分表

    分区 工作原理 对用户而言,分区表是一个独立的逻辑表,但是底层MySQL将其分成多个物理子表,这对用户来说是透明的,每一个分区表都会使用一个独立的表文件. 如果数据量比较大,可以进行分区.分区对PHP ...

  3. python之垃圾回收机制

    一.前言 Python 是一门高级语言,使用起来类似于自然语言,开发的时候自然十分方便快捷,原因是Python在背后为我们默默做了很多事情,其中一件就是垃圾回收,来解决内存管理,内存泄漏的问题. 内存 ...

  4. JMeter - 实时结果 - InfluxDB和Grafana - 第1部分 - 基本设置

    概述: 在本文中,我将解释如何使用JMeter + InfluxDB + Grafana获得实时性能测试结果. 请注意,此主题太大,无法涵盖一篇文章中的所有内容.所以,我试图提供与TestAutoma ...

  5. 将vue和element-ui写在一个html里面方便调试(小白篇)

    声明:纯属小白进门文档 vue的官方文档: https://vuejs.bootcss.com/v2/guide/ 第一步:引入vue.js <script src="https:// ...

  6. Leetcode题解

    前言 Leetcode现在弄了一个Weekly Contest,然后题目又会作为新题目:感觉如果现在还不及时刷题的话可能真的赶不上它题目增长的速度了.......题目会在博客和Github上同步更新的 ...

  7. jquery——解决鼠标移入移出导致盒子不停移动的bug

    使用mouseover().mouseout()时会出现这样一种情况,鼠标快速多次移入移出后这个盒子会在鼠标不动后继续运动 代码如下: <!DOCTYPE html> <html l ...

  8. tcpdump安装配置及抓包分析

    http://blog.csdn.net/e421083458/article/details/23963189 cpdump安装配置及抓包分析 预装软件:[plain] view plain cop ...

  9. Python metaclasses

    metaclasses元类:就像对象是类的实例一样,类是它的元类的实例.调用元类可以创建类. metaclass使用type来创建类,type可以被继承生成新的元类. 这个和C#的反射很相似. 下面是 ...

  10. 牛客网Java刷题知识点之全局变量(又称成员变量,分为类变量和实例变量)、局部变量、静态变量(又称为类变量)

    不多说,直接上干货! 定义类其实就是在定义类中的成员.成员:成员变量<-->属性,成员函数<-->行为. 局部变量在方法内部声明,并且只能在方法内部使用,在外层的方法被调用时被 ...