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温度的方法 引言 为了满足实时性要 ...
随机推荐
- java中不常见的关键字:strictfp
1.strictfp, 即 strict float point (精确浮点). strictfp 关键字可应用于类.接口或方法.使用 strictfp 关键字声明一个方法时,该方法中所有的float ...
- Markdown 空格详细介绍
它叫不换行空格,全称No-Break Space,它是最常见和我们使用最多的空格,大多数的人可能只接触了 ,它是按下space键产生的空格.在HTML中,如果你用空格键产生此空格,空格是不会累加的 ...
- LC 417. Linked List Cycle II
题目描述 Given a linked list, return the node where the cycle begins. If there is no cycle, return null. ...
- php 之分页
$a=$_FILES; // print_r($a);die; foreach ($a as $key => $value) { $k=$key; } // $_FILES['license'] ...
- gdb调试命令总结
常用命令: l 列出源代码 每次默认列10行 list 行号 列出从第几行开始的源代码 list函数名 列出某个函数的源代码 r 运行程序 next(或n) 执行下一行语句 ...
- Qt实现艺术字效果
Qt实现艺术字效果,通常有三种方式,一种是通过绘制机制,另外一种是使用样式表,最后一种是通过图片代替,本次介绍使用绘制来实现艺术字效果. 代码如下(分两种实现): 第一种: QPainter pain ...
- java.lang.ClassCastException: com.sun.proxy.$Proxy4 cannot be cast
解决方案 在配置文件中配置proxy-target-class="true" <aop:aspectj-autoproxy proxy-target-class=" ...
- DP动态规划学习笔记——高级篇上
说了要肝的怎么能咕咕咕呢? 不了解DP或者想从基础开始学习DP的请移步上一篇博客:DP动态规划学习笔记 这一篇博客我们将分为上中下三篇(这样就不用咕咕咕了...),上篇是较难一些树形DP,中篇则是数位 ...
- 雷达无线电系列(二)经典CFAR算法图文解析与实现(matlab)
一,CFAR基础知识介绍 简介 恒虚警检测技术是指雷达系统在保持虚警概率恒定条件下对接收机输出的信号与噪声作判别以确定目标信号是否存在的技术. 前提 由于接收机输出端中肯定存有噪声(包括大气噪声.人为 ...
- C#基础--go to
goto语句的用法非常灵活,你可以用它实现很多功能,但是由于goto语句的跳转影响程序的结构,在使用的时候会使人迷茫,所以一般"教材"上都不建议使用,但是用它可以实现递归,循环,选 ...