P5358 [SDOI2019]快速查询
思路:。。。乱搞数据结构??
提交:1次
题解:
观察到除了单点就是全局操作,所以我们维护一个全局加法标记add和乘法标记mul和答案sum。
单点修改时,比如我们要把 \(pos\) 位置改成 \(y\) ,实际上我们应该储存 \(x\) , 且 \(y=mul*x+add\) ,即我们储存的是逆标记操作后的值。
同时要注意全体赋值后标记和 unordered_map 的清空。
代码:自带大常数
#include<bits/stdc++.h>
#define ll long long
#define R register int
using namespace std;
namespace Luitaryi {
inline int g() { R x=0,f=1;
register char ch; while(!isdigit(ch=getchar())) f=ch=='-'?-1:f;
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x*f;
} const int N=100010,M=1e7+19;
int A,B,n,q,t,add,mul,sum,Inv[M],cvl,ans;
unordered_map<int,int> d;
struct node {int op,p,vl;}a[N];
inline void calc(int x) {
if(a[x].op==1) {
R tmp=a[x].vl,dec; tmp=1ll*((tmp-add)%M+M)%M*Inv[mul]%M;
if(d.count(a[x].p)) dec=(1ll*d[a[x].p]*mul+add)%M;
else dec=(1ll*mul*cvl+add)%M;
d[a[x].p]=tmp; sum=(1ll*sum+a[x].vl-dec+M)%M;
} if(a[x].op==2) add=(add+a[x].vl)%M,sum=(sum+1ll*n*a[x].vl)%M;
if(a[x].op==3) add=1ll*add*a[x].vl%M,mul=1ll*mul*a[x].vl%M,sum=1ll*sum*a[x].vl%M;
if(a[x].op==4) d.clear(),cvl=a[x].vl,add=0,mul=1,sum=1ll*n*a[x].vl%M;
if(a[x].op==5) {
if(!d.count(a[x].vl)) ans=(ans+1ll*mul*cvl+add)%M;
else ans=(ans+1ll*mul*d[a[x].vl]+add)%M;
} if(a[x].op==6) ans=(ans+sum)%M;
}
inline void main() {
Inv[1]=1; for(R i=2;i<M;++i) Inv[i]=M-1ll*M/i*Inv[M%i]%M;
n=g(),q=g(); for(R i=1;i<=q;++i) {
a[i].op=g(); if(a[i].op==1) a[i].p=g();
else if(a[i].op==6) continue; a[i].vl=(g()%M+M)%M;
} t=g(); for(R i=1;i<=t;++i) {
A=g(),B=g();
for(R j=1,c;j<=q;++j)
c=(A+1ll*j*B)%q+1,calc(c);
} printf("%d\n",(ans%M+M)%M);
}
} signed main() {Luitaryi::main(); return 0;}
2019.09.15
61
P5358 [SDOI2019]快速查询的更多相关文章
- luogu P5358 [SDOI2019]快速查询【模拟(?)】
把有单点修改和查询的点离散进一个数组,然后单点修改直接改,记录一个修改时间t,维护一个sm表示这些离散的点的和,val表示出了离散点其他点的值,因为都是一样的所以只记录这一个值即可,记录ljlc为加法 ...
- 【题解】Luogu P5358 [SDOI2019]快速查询
原题传送门 神鱼说这道题是强制离线(smog 我们珂以把被单点修改,单点查询的点单独拿出来处理,把每个数表示成\(mul*x+plus\) 初始状态下\(mul=1,plus=0\) 操作1:在总和中 ...
- [SDOI2019]快速查询——模拟
题目链接: [SDOI2019]快速查询 对于整个序列维护一个标记$(k,b)$表示序列的每个数的真实值为$k*a_{i}+b$(注意要实时维护$k$的逆元),并记录序列的和. 对于单点修改,将$a_ ...
- [SDOI2019]快速查询
[SDOI2019]快速查询 [题目链接] 链接 [思路要点] 据说是 \(\text{SDOI2019}\) 最水的题 操作次数为 \(1e7\) 范围,显然要求每次操作 \(\mathcal{O} ...
- vijos2051 SDOI2019 快速查询
题目链接 吐槽 竟然让\(nlog\)的做法卡过去了.. 思路 因为\(1 \le q \le 10^5\),所以可以先对每个标准操作,所操作的位置进行重标号.这样所有的下标都是在\(10^5\)以内 ...
- 【洛谷5358】[SDOI2019] 快速查询(模拟)
点此看题面 大致题意: 有单点赋值.全局加法.全局乘法.全局赋值.单点求值.全局求和\(6\)种操作.现在给出操作序列,以及\(t\)对正整数\(a_i,b_i\).让你处理\(t*q\)次操作,每次 ...
- SDOI2019快速查询
链接 vijos 思路 虽然询问1e7,但他询问很有意思,所以最多修改1e5个. 先把他们修改的点缩小到1e5之内并没有什么影响. 然后维护mul和add.不修改很好弄,修改的点可以弄点式子加加减减弄 ...
- 快速查询Python脚本语法
/********************************************************************* * 快速查询Python脚本语法 * 说明: * Char ...
- 一种快速查询多点DS18B20温度的方法(转)
源:http://hi.baidu.com/james_xiao/item/79b961c90623093e45941623 一种快速查询多点DS18B20温度的方法 引言 为了满足实时性要 ...
随机推荐
- Win10 鼠标右键新建菜单添加自定义文件
1. 引言 在鼠标右键(右单机)新建菜单中添加自定义文件,例如:写字板,markdown等. 效果图: 2. 操作步骤(以Win10为例) 1. win+R输入regedit进入注册表 2. 这里以添 ...
- php实现微信小程序登录
以上是官方的流程介绍,已经说的很详细了,现在简单介绍一下流程 前端通过wx.login生成code传递给后端,后端通过提交Appid + appSecret + code 到微信方服务器 获取 ses ...
- MySQL 使用tee记录语句和输出日志
在mysql命令行中,使用tee命令,可以记录语句和输出到指定文件.在debugging时会很有用.每执行一条语句,mysql都会讲执行结果刷新到指定文件.Tee功能只在交互模式生效. mysql&g ...
- (四)resultMap、sql片段与动态SQL
一.resultMap 1.1 为什么要用resultMap resultType:指定输出结果的类型(pojo.简单类型.hashmap),将SQL查询结果映射为Java对象. 使用resultTy ...
- 我对DES AES RSA的认识
1.DES(Data Encryption Standard)算法:数据加密标准.是替换和置换细致而复杂的结合体,替换和置换一个接着一个,共循环16次.算法首先将明文分块,每块64位.密钥也是64位, ...
- 获取类的描述信息 DescriptionAttribute
static void Main(string[] args) { var attrs = typeof(TestClass).GetCustomAttributes(typeof(System.Co ...
- javadoc 自动生成java帮助文档
用法: javadoc [options] [packagenames] [sourcefiles] 选项: -public 仅显示 public 类和成员 -protected 显示 protect ...
- 安装mysql采坑记录
安装之前彻底卸载之前的mysql,再次安装,初始化数据库那一步失败. 再次彻底卸载mysql,把原先的安装路径的文件夹删除,文件夹路径:C:\ProgramData,再次安装,成功. 总结:重装mys ...
- JS中的兼容性问题
事件对象兼容 window.event只能在IE下运行,而不能在Firefox下运行,这是因为Firefox的event只能在事件发生的现场使用.Firefox必须从源处加入event作 ...
- element-ui重置表单并清除校验的方法
this.$refs['activityForm'].resetFields(); 只会重置之前表单的内容,并不会清空 只需在关闭弹框的cancel方法中写上重置表单的方法即可 cancel() { ...