【洛谷5358】[SDOI2019] 快速查询(模拟)
大致题意: 有单点赋值、全局加法、全局乘法、全局赋值、单点求值、全局求和\(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] 快速查询(模拟)的更多相关文章
- [SDOI2019]快速查询——模拟
题目链接: [SDOI2019]快速查询 对于整个序列维护一个标记$(k,b)$表示序列的每个数的真实值为$k*a_{i}+b$(注意要实时维护$k$的逆元),并记录序列的和. 对于单点修改,将$a_ ...
- 洛谷 P5594 【XR-4】模拟赛
洛谷 P5594 [XR-4]模拟赛 洛谷传送门 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OI ...
- [SDOI2019]快速查询
[SDOI2019]快速查询 [题目链接] 链接 [思路要点] 据说是 \(\text{SDOI2019}\) 最水的题 操作次数为 \(1e7\) 范围,显然要求每次操作 \(\mathcal{O} ...
- 洛谷P3434 [POI2006]KRA-The Disks [模拟]
题目传送门 KRA 题目描述 For his birthday present little Johnny has received from his parents a new plaything ...
- 【题解】洛谷P3952 [NOIP2017TG] 时间复杂度(模拟)
题目来源:洛谷P3952 思路 纯模拟没啥可说的了 果然好复杂 参考了你谷一个40行代码 代码 #include<iostream> #include<cstdio> #inc ...
- luogu P5358 [SDOI2019]快速查询【模拟(?)】
把有单点修改和查询的点离散进一个数组,然后单点修改直接改,记录一个修改时间t,维护一个sm表示这些离散的点的和,val表示出了离散点其他点的值,因为都是一样的所以只记录这一个值即可,记录ljlc为加法 ...
- 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】
U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...
- 洛谷 P3955 图书管理员【模拟/思维】
题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个正整数.如果一本书的图 书编码恰好以读者的需求码结尾,那 ...
- 洛谷P1039 侦探推理(模拟)
侦探推理 题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情 ...
随机推荐
- 51nod 1781 Pinball(线段树)
题面 Pinball的游戏界面由m+2行.n列组成.第一行在顶端.一个球会从第一行的某一列出发,开始垂直下落,界面上有一些漏斗,一共有m个漏斗分别放在第2~m+1行,第i个漏斗的作用是把经过第i+1行 ...
- [Xcode 实际操作]四、常用控件-(3)UILabel文本标签的使用
目录:[Swift]Xcode实际操作 本文将演示标签控件的基础用法, 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit class Vie ...
- 老男孩Day1作业(二):三级菜单
作业需求: 1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功能 1)编写思路 编 ...
- 迎接仪式 dp
题目描述 LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字.一旁的Orzer依次摆出“欢迎欢迎欢迎欢迎……”的 ...
- LightOJ 1336 - Sigma Function
原题链接 基础数论中很经典的一道题 题意 给出了σ(n)的计算公式,让你找出整数1-n中有多少对应σ(n)的值是偶数. 思路 观察σ(n)的公式发现,每一个乘项都是 (piei+1 - 1) / (p ...
- BZOJ 2462 [BeiJing2011]矩阵模板 矩阵哈希
昨天卡了一天常数...然后发现吧$unsigned\space long\space long$改成$unsigned$就可以过了$qwq$ 先把每一行的前缀哈希求出,然后再竖着把每个前缀哈希值哈希起 ...
- Codeforces Round #565 (Div. 3) B. Merge it!
链接: https://codeforces.com/contest/1176/problem/B 题意: You are given an array a consisting of n integ ...
- @Inherited:允许子类继承父类的注解。
在看定义注解的相关文章的时候,看到这个@Inherited注解,简单的说明并没有真正搞懂是什么意思.在网上搜索了一些相关的内容,现在把一篇文章转载过来.以便后面使用. 文章出处,转载地址:(http: ...
- MySQL存储引擎InnoDB,MyISAM
MySQL存储引擎InnoDB,MyISAM1.区别:(1)InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语 ...
- LeetCode 583 Delete Operation for Two Strings 删除两个字符串的不同部分使两个字符串相同,求删除的步数
Given two words word1 and word2, find the minimum number of steps required to make word1 and word2 t ...