#离线#洛谷 5358 [SDOI2019]快速查询
分析
由于询问次数很多,只能离线去做,考虑全局的操作都可以打标记。
对于单点的操作,实际上的数为 \(x'=x*Mul+Add\) 由于这两个标记单独撤销比较困难,
不妨开一个数组直接维护 \(x=\frac{x'-Add}{Mul}\),
单点赋值就直接加上 \(\frac{x_q-x'}{Mul}\),单点查询再把标记乘回去即可,
注意当全局乘0时转换为全局赋值为0
代码
#include <cstdio>
#include <cctype>
#include <unordered_map>
#define rr register
using namespace std;
const int mod=10000019;
struct rec{int opt,x,y;}q[100011];
int inv[mod],Mul=1,w,Add,n,ans,Q;
unordered_map<int,int>tim;
inline signed iut(){
rr int ans=0,f=1; rr char c=getchar();
while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans*f;
}
inline signed mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
inline void doit(rec t){
switch (t.opt){
case 1:{
rr int now=mo(1ll*(tim.count(t.x)?tim[t.x]:0)*Mul%mod,Add);
w=mo(w,mod-now),tim[t.x]=1ll*mo(t.y,mod-Add)*inv[Mul]%mod,w=mo(w,t.y);
break;
}
case 2:{
Add=mo(Add,t.y),w=mo(w,1ll*n*t.y%mod);
break;
}
case 3:{
Mul=1ll*Mul*t.y%mod,Add=1ll*Add*t.y%mod,w=1ll*w*t.y%mod;
break;
}
case 4:{
Mul=1,Add=t.y,w=1ll*n*t.y%mod,tim.clear();
break;
}
case 5:{
ans=mo(mo(ans,Add),1ll*(tim.count(t.x)?tim[t.x]:0)*Mul%mod);
break;
}
case 6:{
ans=mo(ans,w);
break;
}
}
}
signed main(){
n=iut(),Q=iut(),inv[0]=inv[1]=1;
for (rr int i=2;i<mod;++i) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
for (rr int i=1;i<=Q;++i){
rr int opt=iut();
switch (opt){
case 1:{
q[i]=(rec){opt,iut(),iut()};
break;
}
case 2:{
q[i]=(rec){opt,0,iut()};
break;
}
case 3:{
q[i]=(rec){opt,0,iut()};
break;
}
case 4:{
q[i]=(rec){opt,0,iut()};
break;
}
case 5:{
q[i]=(rec){opt,iut(),0};
break;
}
case 6:{
q[i]=(rec){opt,0,0};
break;
}
}
if (opt==3&&!q[i].y) q[i].opt=4;
q[i].y=(q[i].y%mod+mod)%mod;
}
for (rr int T=iut();T;--T){
rr int x=iut(),y=iut();
for (rr int i=1;i<=Q;++i)
doit(q[(x+1ll*i*y)%Q+1]);
}
return !printf("%d",ans);
}
#离线#洛谷 5358 [SDOI2019]快速查询的更多相关文章
- [SDOI2019]快速查询——模拟
题目链接: [SDOI2019]快速查询 对于整个序列维护一个标记$(k,b)$表示序列的每个数的真实值为$k*a_{i}+b$(注意要实时维护$k$的逆元),并记录序列的和. 对于单点修改,将$a_ ...
- [SDOI2019]快速查询
[SDOI2019]快速查询 [题目链接] 链接 [思路要点] 据说是 \(\text{SDOI2019}\) 最水的题 操作次数为 \(1e7\) 范围,显然要求每次操作 \(\mathcal{O} ...
- 【洛谷5358】[SDOI2019] 快速查询(模拟)
点此看题面 大致题意: 有单点赋值.全局加法.全局乘法.全局赋值.单点求值.全局求和\(6\)种操作.现在给出操作序列,以及\(t\)对正整数\(a_i,b_i\).让你处理\(t*q\)次操作,每次 ...
- luogu P5358 [SDOI2019]快速查询【模拟(?)】
把有单点修改和查询的点离散进一个数组,然后单点修改直接改,记录一个修改时间t,维护一个sm表示这些离散的点的和,val表示出了离散点其他点的值,因为都是一样的所以只记录这一个值即可,记录ljlc为加法 ...
- vijos2051 SDOI2019 快速查询
题目链接 吐槽 竟然让\(nlog\)的做法卡过去了.. 思路 因为\(1 \le q \le 10^5\),所以可以先对每个标准操作,所操作的位置进行重标号.这样所有的下标都是在\(10^5\)以内 ...
- 【题解】Luogu P5358 [SDOI2019]快速查询
原题传送门 神鱼说这道题是强制离线(smog 我们珂以把被单点修改,单点查询的点单独拿出来处理,把每个数表示成\(mul*x+plus\) 初始状态下\(mul=1,plus=0\) 操作1:在总和中 ...
- 【洛谷】P1229快速幂
题目链接:https://www.luogu.org/problemnew/show/P1226 题意:求b^p % m之后的结果 题解:快速幂模板 代码: #include<iostream& ...
- 洛谷.4717.[模板]快速沃尔什变换(FWT)
题目链接 https://www.mina.moe/archives/7598 //285ms 3.53MB #include <cstdio> #include <cctype&g ...
- SDOI2019快速查询
链接 vijos 思路 虽然询问1e7,但他询问很有意思,所以最多修改1e5个. 先把他们修改的点缩小到1e5之内并没有什么影响. 然后维护mul和add.不修改很好弄,修改的点可以弄点式子加加减减弄 ...
- P5358 [SDOI2019]快速查询
思路:...乱搞数据结构?? 提交:1次 题解: 观察到除了单点就是全局操作,所以我们维护一个全局加法标记add和乘法标记mul和答案sum. 单点修改时,比如我们要把 \(pos\) 位置改成 \( ...
随机推荐
- Qt开发技术:QtCharts(一)QtCharts基本介绍以及图表框架详解
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- 重点:递归函数,数学模块,随机模块---day14
1.递归函数 自己调用自己的函数是递归函数 递:去 归:回 一去一回叫作递归 简单递归 def digui(n): print(n,'<==1==>') if n > 0: digu ...
- linux下安装nginx(yum源安装)
备份yum源 cd /etc/yum.repos.d mkdir repo_bak mv *.repo repo_bak/ 下载阿里云repo文件 wget -O /etc/yum.repos.d/C ...
- day06---基础优化之防火墙,yum源,字符集,vim补充,echo命令
1.系统版本号 cat /etc/redhat-release hostnamectl uname -r 2.系统 时间硬件时间 date hwclock clock hwclock systohc ...
- GPS坐标系转换 go golang 版本
GPS坐标系转换 坐标系 解释 WGS84坐标系 地球坐标系,国际通用坐标系 GCJ02坐标系 火星坐标系,WGS84坐标系加密后的坐标系:Google国内地图.高德.腾讯地图 使用 BD09坐标系 ...
- 【Azure 应用程序见解】在Azure门户中,创建App Service(应用服务)时,无法一起创建Application Insights的问题
问题描述 创建Web应用时启用监视的问题.Azure管理员(Admin)用户下分配了 一个子用户.但是在使用子用户创建WEB应用的时候,启用 Application Insights 选项的 &quo ...
- 【应用服务 App Service】App Service For Linux 中如何挂载一个共享文件夹呢? Mount Azure Storage Account File Share
问题描述 使用Linux作为服务器运行Web App时,如何将 Storage Account 作为本地共享装载到 App Service for Linux / Container 中的应用呢? ...
- 【Azure Developer】PHP网站使用AAD授权登录的参考示例
问题描述 如果有个PHP网站,需要使用AAD授权登录,有没有PHP代码实例 可供参考呢? 参考代码 参考一篇博文(Single sign-on with Azure AD in PHP),学习使用SS ...
- Advanced .Net Debugging 3:基本调试任务(上)
一.简介 这是我的<Advanced .Net Debugging>这个系列的第三篇文章.这个系列的每篇文章写的周期都要很长,因为每篇文章都是原书的一章内容(太长的就会分开写).再者说,原 ...
- 掌握pandas cut函数,一键实现数据分类
pandas中的cut函数可将一维数据按照给定的区间进行分组,并为每个值分配对应的标签.其主要功能是将连续的数值数据转化为离散的分组数据,方便进行分析和统计. 1. 数据准备 下面的示例中使用的数据采 ...