#离线#洛谷 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\) 位置改成 \( ...
随机推荐
- 万字Java进阶笔记总结
JavaApi 字符串 String 注意:Java中"=="操作符的作用: 基本数据类型:比较的是内容. 引用数据类型比较的是对象的内存地址. StringBuffer/Stri ...
- 什么是数据同步利器DataX,如何使用?
转载至我的博客 https://www.infrastack.cn ,公众号:架构成长指南 今天给大家分享一个阿里开源的数据同步工具DataX,在Github拥有14.8k的star,非常受欢迎,官网 ...
- 【Azure 事件中心】Event Hub服务中的度量值指标介绍
问题描述 Event Hub服务中的度量值指标解说 1)request和message的区别 2)capture backlog 和 capture message 怎么理解 3)quota exce ...
- Spring Boot+Thymeleaf+MyBatis--推荐一个后端练手极佳的商城项目
项目整体架构 newbee-mall ├── src/main/java └── ltd.newbee.mall ├── common // 存放相关的常量配置及枚举类 ├── config // 存 ...
- C++ String //string字符串查找和替换 比较 存取 修改单个字符 插入和删除 string字串
1 //string字符串查找和替换 比较 存取 修改单个字符 插入和删除 string字串 2 #include <iostream> 3 #include<string> ...
- Python 在Word中创建表格并填入数据、图片
在Word中,表格是一个强大的工具,它可以帮助你更好地组织.呈现和分析信息.本文将介绍如何使用Python在Word中创建表格并填入数据.图片,以及设置表格样式等. Python Word库: 要使用 ...
- [.Net]使用Soa库+Abp搭建微服务项目框架(三):项目改造
上一章我们说道,如果要使各模块之间解耦,使得各自独立成服务,首先要解除各个模块之间的引用关系. 还记得上一章我们的小项目吗 ?们回到之前的代码上来,当前的项目架构如下图: 这次的任务是将它改造成 ...
- Failed to instantiate [applets.nature.mapper.LogInfoMapper]: Specified class is an interface-项目启动报错
一.问题由来 周日下午项目在进行测试时,有些东西需要临时修改,自己已经打好一个包部署到测试服务器进行部署.在测试过程中发现一个问题,就是 现在的代码跑起来是没问题的,只是其他人又的东西还没做,所以暂时 ...
- C++学习笔记之进阶编程
目录 进阶编程 STL(Standard Template Library) 容器(container) 仿函数(functor) 算法(algorithm) transform 查找 全排列 迭代器 ...
- k8s资源管理中request和limit的区别
在 Kubernetes(K8s)中,request和limit是两个重要的概念,用于控制和管理容器的资源使用. Request(请求): request定义了容器启动时需要保证的最小资源量.这表示K ...