hdu6274 Master of Sequence(预处理+二分)

题意:

在这里插入图片描述

解法:

操 作 3 显 然 是 二 分 , 但 是 c h e c k 是 O ( n = 1 e 5 ) 的 , 顶 不 住 . 操作3显然是二分,但是check是O(n=1e5)的,顶不住. 3,checkO(n=1e5),.

观 察 到 a ( i ) 的 取 值 只 有 1000 , 考 虑 合 并 a ( i ) 相 同 的 位 置 . 观察到a(i)的取值只有1000,考虑合并a(i)相同的位置. a(i)1000,a(i).

S ( t ) = ∑ i = 1 n ⌊ t − b i a i ⌋ S(t)=\sum_{i=1}^n \lfloor \frac{t-bi}{ai}\rfloor S(t)=i=1naitbi

令 t = k 1 ∗ a i + c 1 , b i = k 2 ∗ a i + c 2 令t=k1*ai+c1,bi=k2*ai+c2 t=k1ai+c1,bi=k2ai+c2

那 么 S ( t ) = ∑ i = 1 n ⌊ k 1 ∗ a i + c 1 − k 2 ∗ a i − c 2 a i ⌋ 那么S(t)=\sum_{i=1}^n \lfloor \frac{k1*ai+c1-k2*ai-c2}{ai} \rfloor S(t)=i=1naik1ai+c1k2aic2

= ∑ i = 1 n ⌊ k 1 ∗ a i − k 2 ∗ a i − ( c 2 − c 1 ) a i ⌋ =\sum_{i=1}^n \lfloor \frac{k1*ai-k2*ai-(c2-c1)}{ai} \rfloor =i=1naik1aik2ai(c2c1)

固 定 t , 对 于 每 种 a ( i ) : 固定t,对于每种a(i): t,a(i):

k 1 , c 1 可 以 直 接 计 算 , s u m ( k 2 ) , c n t ( c 2 ) 可 以 预 处 理 k1,c1可以直接计算,sum(k2),cnt(c2)可以预处理 k1,c1,sum(k2),cnt(c2)

但 是 对 于 下 取 整 , 对 于 当 c 2 − c 1 > 0 的 时 ( 即 c 2 > c 1 ) , 贡 献 会 减 少 1 但是对于下取整,对于当c2-c1>0的时(即c2>c1),贡献会减少1 ,c2c1>0(c2>c1),1

因 此 还 需 要 记 录 对 于 每 一 种 c 1 , 当 前 有 多 少 个 c 2 大 于 它 , 这 个 可 以 预 处 理 因此还需要记录对于每一种c1,当前有多少个c2大于它,这个可以预处理 c1,c2,

此 外 还 需 要 预 处 理 每 组 a i 的 数 量 s z [ a [ i ] ] 此外还需要预处理每组ai的数量sz[a[i]] aisz[a[i]]

然 后 就 能 将 c h e c k 优 化 为 O ( 1000 ) 的 了 , 不 会 超 时 然后就能将check优化为O(1000)的了,不会超时 checkO(1000),

code:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxm=2e6+5;
const int mod=998244353;
int cntC2[1005][1005];
int sumK2[1005];
int sz[1005];
int a[maxm];
int b[maxm];
int n,m;
int ppow(int a,int b,int mod){
    int ans=1%mod;a%=mod;
    for(;b;b>>=1,a=a*a%mod)if(b&1)ans=ans*a%mod;
    return ans;
}
int S(int t){
    int ans=0;
    for(int i=1;i<=1000;i++){
        int K1=t/i;
        int C1=t%i;
        int temp=K1*sz[i]-sumK2[i];
        temp-=cntC2[i][C1+1];
        ans+=temp;
    }
    return ans;
}
void solve(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++){
        cin>>b[i];
    }
    for(int i=1;i<=1000;i++){
        sumK2[i]=0;
        sz[i]=0;
        for(int j=0;j<1000;j++){
            cntC2[i][j]=0;
        }
    }
    for(int i=1;i<=n;i++){
        sumK2[a[i]]+=b[i]/a[i];
        cntC2[a[i]][b[i]%a[i]]++;
        sz[a[i]]++;
    }
    for(int i=1;i<=1000;i++){
        for(int j=1000-1;j>=0;j--){
            cntC2[i][j]+=cntC2[i][j+1];//cnt[i][j]表示>=j的数量
        }
    }
    while(m--){
        int op;cin>>op;
        if(op==1){
            int x,y;cin>>x>>y;
            sz[a[x]]--;
            sumK2[a[x]]-=b[x]/a[x];
            for(int i=b[x]%a[x];i>=0;i--){
                cntC2[a[x]][i]--;
            }
            a[x]=y;
            sz[a[x]]++;
            sumK2[a[x]]+=b[x]/a[x];
            for(int i=b[x]%a[x];i>=0;i--){
                cntC2[a[x]][i]++;
            }
        }else if(op==2){
            int x,y;cin>>x>>y;
            sz[a[x]]--;
            sumK2[a[x]]-=b[x]/a[x];
            for(int i=b[x]%a[x];i>=0;i--){
                cntC2[a[x]][i]--;
            }
            b[x]=y;
            sz[a[x]]++;
            sumK2[a[x]]+=b[x]/a[x];
            for(int i=b[x]%a[x];i>=0;i--){
                cntC2[a[x]][i]++;
            }
        }else if(op==3){
            int k;cin>>k;
            int l=0,r=1e9;
            int ans=-1;
            while(l<=r){
                int mid=(l+r)/2;
                int t=S(mid);
                if(t>=k){
                    ans=mid,r=mid-1;
                }else{
                    l=mid+1;
                }
            }
            cout<<ans<<endl;
        }
    }
}
signed main(){
    ios::sync_with_stdio(0);
    int T=1;
    cin>>T;
    while(T--){
        solve();
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值