JZOJ 5439. 【NOIP2017提高A组集训10.31】Calculate

来源:互联网 发布:端口是什么 怎么查看 编辑:程序博客网 时间:2024/06/03 10:10

Description

Description

Input

Input

Output

Output

Data Constraint

Data Constraint

Solution

Solution

  • 设前缀和 g[i][j] 表示 AiBj 的数量。

  • 这样就能 O(1) 算出 t 的值,值改变时暴力维护即可。

  • 时间复杂度 O(TMMaxAi)

Code

#include<cstdio>#include<cstring>using namespace std;const int N=1e5+1,M=1001;int n,m,mx;long long num;long long g[M][M];int a[N],b[N];inline int read(){    int X=0,w=1; char ch=0;    while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}    while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();    return X*w;}inline void write(long long x){if(x>9) write(x/10);putchar(x%10+'0');}inline int max(int x,int y){return x>y?x:y;}inline long long check(long long t){    long long sum=-num,all;    for(int i=1;i<=mx;i++)        if(all=g[i][i-1]) sum+=t/i*all-(all-g[i][t%i]);    return sum;}int main(){    int T=read();    while(T--)    {        n=read(),m=read(),num=mx=0;        memset(g,0,sizeof(g));        for(int i=1;i<=n;i++) mx=max(mx,a[i]=read());        for(int i=1;i<=n;i++) num+=(b[i]=read())/a[i],g[a[i]][b[i]%a[i]]++;        for(int i=1;i<=mx;i++)            for(int j=1;j<=mx;j++) g[i][j]+=g[i][j-1];        while(m--)        {            int type=read();            if(type==1)            {                int x=read(),y=read();                for(int i=b[x]%a[x];i<a[x];i++) g[a[x]][i]--;                num-=b[x]/a[x];mx=max(mx,a[x]=y);num+=b[x]/y;                for(int i=b[x]%y;i<a[x];i++) g[y][i]++;            }else            if(type==2)            {                int x=read(),y=read();                for(int i=b[x]%a[x];i<a[x];i++) g[a[x]][i]--;                num-=b[x]/a[x];b[x]=y;num+=y/a[x];                for(int i=y%a[x];i<a[x];i++) g[a[x]][i]++;            }else            {                int k=read();                long long l=0,r=1e12+1e9;                while(l<r)                {                    long long mid=(l+r)>>1;                    if(check(mid)<k) l=mid+1; else r=mid;                }                write(l),putchar('\n');            }        }    }    return 0;}
阅读全文
1 0
原创粉丝点击