把有单点修改和查询的点离散进一个数组,然后单点修改直接改,记录一个修改时间t,维护一个sm表示这些离散的点的和,val表示出了离散点其他点的值,因为都是一样的所以只记录这一个值即可,记录ljlc为加法乘法的lazytag,整体加整体乘的时候像线段树一样改smljlc,还有修改val,整体赋值的时候把valsmljlc都初始化,记录一个赋值时间ti

单点查询的时候如果这个点的修改时间比当前赋值时间早就直接val,否则是数组值和lazytag操作一下,整体查询直接sm+val*has即可

那个求逆元本来应该线性预处理的,但是我看快速幂跑过了就没管(……

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
const int N=200005,mod=1e7+19;
int n,m,q,o[N],p[N],a[N],b[N],g[N],tot,has,ti,t[N];
long long v[N],d[N],sm,ans,lj,lc=1,val;//,r[N];
map<int,int>mp;
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
long long ksm(long long a,long long b)
{
long long r=1;
while(b)
{
if(b&1)
r=r*a%mod;
a=a*a%mod;
b>>=1;
}
return r;
}
int main()
{
n=read(),q=read();
for(int i=1;i<=q;i++)
{
o[i]=read();
if(o[i]==1)
p[i]=read(),v[i]=read(),g[++tot]=p[i];
else if(o[i]==5)
p[i]=read(),g[++tot]=p[i];
else if(o[i]!=6)
v[i]=read();
}
m=read();
for(int i=1;i<=m;i++)
a[i]=read(),b[i]=read();
sort(g+1,g+1+tot);
for(int i=1;i<=tot;i++)
if(i==1||g[i]!=g[i-1])
mp[g[i]]=++has;
for(int i=1;i<=q;i++)
p[i]=mp[p[i]];
for(int i=1;i<=m;i++)
for(int j=1;j<=q;j++)
{
int w=(a[i]+1ll*j*b[i]%q)%q+1;
if(o[w]==1)
{
sm=(sm-((t[p[w]]<ti)?val:(d[p[w]]*lc+lj))+v[w])%mod;
d[p[w]]=(v[w]-lj)*ksm(lc,mod-2)%mod;
t[p[w]]=(i-1)*q+j;
}
else if(o[w]==2)
{
val=(val+v[w])%mod;
sm=(sm+v[w]*has)%mod;
lj=(lj+v[w])%mod;
}
else if(o[w]==3)
{
val=val*v[w]%mod;
sm=sm*v[w]%mod;
lc=lc*v[w]%mod;
lj=lj*v[w]%mod;
}
else if(o[w]==4)
{
val=v[w],lj==0,lc=1;
ti=(i-1)*q+j;
sm=v[w]*has%mod;
}
else if(o[w]==5)
ans=(ans+((t[p[w]]<ti)?val:(d[p[w]]*lc+lj)%mod))%mod;
else
ans=(ans+sm+val*(n-has))%mod;
}
printf("%lld\n",(ans+mod)%mod);
return 0;
}

luogu P5358 [SDOI2019]快速查询【模拟(?)】的更多相关文章

  1. 【题解】Luogu P5358 [SDOI2019]快速查询

    原题传送门 神鱼说这道题是强制离线(smog 我们珂以把被单点修改,单点查询的点单独拿出来处理,把每个数表示成\(mul*x+plus\) 初始状态下\(mul=1,plus=0\) 操作1:在总和中 ...

  2. [SDOI2019]快速查询——模拟

    题目链接: [SDOI2019]快速查询 对于整个序列维护一个标记$(k,b)$表示序列的每个数的真实值为$k*a_{i}+b$(注意要实时维护$k$的逆元),并记录序列的和. 对于单点修改,将$a_ ...

  3. P5358 [SDOI2019]快速查询

    思路:...乱搞数据结构?? 提交:1次 题解: 观察到除了单点就是全局操作,所以我们维护一个全局加法标记add和乘法标记mul和答案sum. 单点修改时,比如我们要把 \(pos\) 位置改成 \( ...

  4. [SDOI2019]快速查询

    [SDOI2019]快速查询 [题目链接] 链接 [思路要点] 据说是 \(\text{SDOI2019}\) 最水的题 操作次数为 \(1e7\) 范围,显然要求每次操作 \(\mathcal{O} ...

  5. 【洛谷5358】[SDOI2019] 快速查询(模拟)

    点此看题面 大致题意: 有单点赋值.全局加法.全局乘法.全局赋值.单点求值.全局求和\(6\)种操作.现在给出操作序列,以及\(t\)对正整数\(a_i,b_i\).让你处理\(t*q\)次操作,每次 ...

  6. vijos2051 SDOI2019 快速查询

    题目链接 吐槽 竟然让\(nlog\)的做法卡过去了.. 思路 因为\(1 \le q \le 10^5\),所以可以先对每个标准操作,所操作的位置进行重标号.这样所有的下标都是在\(10^5\)以内 ...

  7. SDOI2019快速查询

    链接 vijos 思路 虽然询问1e7,但他询问很有意思,所以最多修改1e5个. 先把他们修改的点缩小到1e5之内并没有什么影响. 然后维护mul和add.不修改很好弄,修改的点可以弄点式子加加减减弄 ...

  8. BZOJ 1920 Luogu P4217 [CTSC2010]产品销售 (模拟费用流、线段树)

    题目链接 (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=1920 (luogu) https://www.luogu.org/prob ...

  9. 快速查询List中指定的数据

    时间:2017/5/15 作者:李国君 题目:快速查询List中指定的数据 背景:当List中保存了大量的数据时,用传统的方法去遍历指定的数据肯定会效率低下,有一个方法就是类似于数据库查询那样,根据索 ...

随机推荐

  1. spring mvc头

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  2. Javascript代码收集

    1.模仿jquery each 原文地址 function each(obj, fn){ var i; if(Object.prototype.toString.call(obj) === '[obj ...

  3. Java for LeetCode 086

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  4. PAT 天梯赛 L2-022. 重排链表 【数据结构】

    题目链接 https://www.patest.cn/contests/gplt/L2-022 思路 先用结构体 把每个结点信息保存下来 然后深搜一下 遍历一下整个链表 然后就重新排一下 但是要注意一 ...

  5. Hadoop- 集群时间同步

    集群的时间要同步 * 找一台机器 时间服务器 * 所有的机器与这台机器时间进行定时的同步 比如,每日十分钟,同步一次时间 # rpm -qa|grep ntp # vi /etc/ntp.conf # ...

  6. 我的.emacs文件,用于C/C++及shell编程。

    1. [代码]我的.emacs文件,用于C/C++及shell编程.;;我的配置;;1.基本配置;;外观配置***************;;禁用启动画面(setq inhibit-startup-m ...

  7. Struts2 输入校验 第四弹

    ActionSupport 里面有一个validate.可以重写里面你的方法. 校验执行流程: 1)首先进行类型转化 2)然后进行输入校验(执行validate方法) 3)如果在上述过程中出现了任何错 ...

  8. CentOS Wifi Connection

    方法一: http://wiki.centos.org/HowTos/Laptops/WpaSupplicant http://www.cnblogs.com/tanghuimin0713/p/343 ...

  9. rand()与srand()

    1.不用srand()的话 两次运行程序产生的随机数序列相同 2.用srand() 两次运行程序产生的随机数则不同 示例程序: #include<iostream> #include< ...

  10. 小程序js页面设置上导航颜色

    //导航条颜色更改 wx.setNavigationBarColor({ frontColor: '#ffffff', // 必写项 backgroundColor: '#008de6', // 必写 ...