题目

分析

对于$$\sum_{i=1}^{n}\lfloor\dfrac{T-B_i}{A_i}\rfloor$$

我们考虑拆开处理,得到

\[\sum_{i=1}^{n}(\lfloor\dfrac{T}{A_i}\rfloor-\lfloor\dfrac{B_i}{A_i}\rfloor)-[T\%A_i<B_i\%A_i]
\]

因为\(A_i<=1000\),那么我们可以

对于每个模数\(mo=A_i\)

设S[mo][j],记录B数组中模mo后为j的个数,并且对于S[mo]求一个前缀和。

对于修改操作,直接在A数组或B数组上修改,并且修改S数组以及O(N)更新前缀和。

而对于查询操作,二分T,判断是否合法。

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>
const int maxlongint=2147483647;
const int mo=1e9;
const int N=200005;
const int M=1000;
using namespace std;
int a[N],b[N],n,m,T,c[M+100][M+100],sum[M+100][M+100];
long long num;
void read(int &n)
{
char ch=' ';int q=0,w=1;
for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar());
if(ch=='-')w=-1,ch=getchar();
for(;ch>='0' && ch<='9';ch=getchar())q=(q<<1)+(q<<3)+ch-'0';n=q*w;
}
int prt[20];
void write(long long x)
{
if(x<0) putchar('-'),x=-x;
for(;x;x/=10) prt[++prt[0]]=x%10;
if(!prt[0]) prt[++prt[0]]=0;
for (;prt[0];putchar('0'+prt[prt[0]--]));
}
void cha(int x)
{
sum[x][0]=c[x][0];
for(int j=1;j<=M;j++) sum[x][j]=sum[x][j-1]+c[x][j];
}
bool check(int k,int t)
{
long long su=-num;
for(int i=1;i<=M && su<k;i++) su=su+1ll*sum[i][M]*(t/i)-1ll*(sum[i][M]-sum[i][t%i]);
return su>=k;
}
int main()
{
read(T);
for(;T--;)
{
read(n),read(m);
memset(c,0,sizeof(c));
memset(sum,0,sizeof(sum));
num=0;
for(int i=1;i<=n;i++) read(a[i]);
for(int i=1;i<=n;i++)
{
read(b[i]);
num+=1ll*(b[i]/a[i]);
c[a[i]][b[i]%a[i]]++;
}
for(int i=1;i<=M;i++) cha(i);
for(int i=1,x,y,t;i<=m;i++)
{
read(t),read(x),t--;
if(t<2)
{
read(y);
c[a[x]][b[x]%a[x]]--;
cha(a[x]);
num-=1ll*(b[x]/a[x]);
if(!t) a[x]=y;
else b[x]=y;
num+=1ll*(b[x]/a[x]);
c[a[x]][b[x]%a[x]]++;
cha(a[x]);
}
else
{
long long l=0,r=mo;
while(l<r)
{
long long mid=(l+r)>>1;
if(check(x,mid)) r=mid;
else l=mid+1;
}
write(l),putchar('\n');
}
}
}
}

【JZOJ5439】【NOIP2017提高A组集训10.31】Calculate的更多相关文章

  1. [JZOJ 5437] [NOIP2017提高A组集训10.31] Sequence 解题报告 (KMP)

    题目链接: http://172.16.0.132/senior/#main/show/5437 题目: 题解: 发现满足上述性质并且仅当A序列的子序列的差分序列与B序列的差分序列相同 于是我们把A变 ...

  2. 【JZOJ5428】【NOIP2017提高A组集训10.27】查询

    题目 给出一个长度为n的序列a[] 给出q组询问,每组询问形如\(<x,y>\),求a序列的所有区间中,数字x的出现次数与数字y的出现次数相同的区间有多少个. 分析 我们可以维护一个前缀和 ...

  3. 5433. 【NOIP2017提高A组集训10.28】图

    题目描述 Description 有一个n个点A+B条边的无向连通图,有一变量x,每条边的权值都是一个关于x的简单多项式,其中有A条边的权值是k+x,另外B条边的权值是k-x,如果只保留权值形如k+x ...

  4. 【JZOJ5430】【NOIP2017提高A组集训10.27】图

    题目 有一个n个点的无向图,给出m条边,每条边的信息形如\(<x,y,c,r>\) 给出q组询问形如\(<u,v,l,r>\) 接下来解释询问以及边的意义 询问表示,一开始你在 ...

  5. 5432. 【NOIP2017提高A组集训10.28】三元组

    题目 题目大意 给你\(X+Y+Z\)个三元组\((x_i,y_i,z_i)\). 然后选\(X\)个\(x_i\),选\(Y\)个\(y_i\),选\(Z\)个\(z_i\). 每个三元组只能选择其 ...

  6. 【JZOJ5434】【NOIP2017提高A组集训10.30】Matrix

    题目 分析 假设答案为ans, 发现\[k=\sum_{i=1}^{min(n,k)}\lfloor \dfrac{ans}{i} \rfloor\] 于是可以对ans进行二分, 用分块来求出上面的式 ...

  7. 【NOIP2017提高A组集训10.21】Fantasy

    题目 Y sera 陷入了沉睡,幻境中它梦到一个长度为N 的序列{Ai}. 对于这个序列的每一个子串,定义其幻境值为这个子串的和,现在Y sera 希望选择K 个不同的子串并使得这K 个子串的幻境值之 ...

  8. 【NOIP2017提高A组模拟10.7】Adore

    题目 小w 偶然间见到了一个DAG. 这个DAG 有m 层,第一层只有一个源点,最后一层只有一个汇点,剩下的每一层都有k 个节点. 现在小w 每次可以取反第i(1 < i < n - 1) ...

  9. NOIP2017提高A组模拟10.6】Biology

    题目 trie 暴力就是对于每个询问的T个字符串 第i个和第i+1个直接个从后暴力枚举每位是否相同, 但这个方法TLE 我们考虑是否可以用更快的方法来求出两个字符串的最长公共后缀. 我们把所有的字符串 ...

随机推荐

  1. python 实现 灰色预测 GM(1,1)模型 灰色系统 预测 灰色预测公式推导

    来源公式推导连接 https://blog.csdn.net/qq_36387683/article/details/88554434 关键词:灰色预测 python 实现 灰色预测 GM(1,1)模 ...

  2. OI模板のpoke流[大型考试复习必备/kl]

    数论 快速乘: ll qmul(ll x,ll y,ll mod) { ll ans=0; while(y) { if(y&1) (ans+=x)%=mod; y>>=1; (x+ ...

  3. Ubuntu关机等待时间解决方案

    关于GDM问题(a stop job is running for session c1 of user root 1 min 30 s) 注意了,这个不是系统的问题,是配置的问题.鼓捣了老久才找出来 ...

  4. JAVA验证

    1.一个JAVA类只能有一个主类. 2.main()方法返回值改为int,不能运行 3.变量作用域有限 实例: 4.数值类型在内存中直接存储其本身的值,对于不同的数值类型,内存中会分配相应的大小去存储 ...

  5. 像写SQL语句一样写Java代码

    @Data @AllArgsConstructor public class Trader { private final String name; private final String city ...

  6. 云数据库RDS MySQL 版

    阿里云关系型数据库(Relational Database Service,简称RDS)是一种稳定可靠.可弹性伸缩的在线数据库服务.基于阿里云分布式文件系统和SSD盘高性能存储,RDS支持MySQL. ...

  7. SSM @Autowired注入失败

    1, Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案 https://blog.csdn.net/weixin_30945319/article/details/9 ...

  8. L2-014. 列车调度(Dilworth定理)

    火车站的列车调度铁轨的结构如下图所示. Figure 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条轨道进入,最后从出口 ...

  9. Python简单主机批量管理工具

    一.程序介绍 需求: 简单主机批量管理工具 需求: 1.主机分组 2.主机信息使用配置文件 3.可批量执行命令.发送文件,结果实时返回 4.主机用户名密码.端口可以不同 5.执行远程命令使用param ...

  10. The minimal unique substring CodeForces - 1159D (构造)

    核心观察是形如01,001,0001,...的串循环时, $n$每增长1, $k$就增长1. #include <iostream> #include <sstream> #i ...