Thứ Hai, 18 tháng 4, 2022

TRAINING C++


#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5;
long long a[N],b[N],pre[N],cur[N];
//tim vi tri lon nhat thoa cur(i)<=a
int bs(int l,int r, int x){
    int res=0;
    while (l<=r){
        int mid=(l+r)/2;
        if (cur[mid]<=x)
        {
            res=mid;l=mid+1;
        }
        else r=mid-1;
    }
    return res;
}
int main()
{
    freopen("training.inp","r",stdin);
    freopen("training.out","w",stdout);
    int n,m;
    cin >> n >> m;
    for (int i=1; i<=n; i++) cin >> a[i];
    for (int i=1; i<=m; i++) cin >> b[i];
    sort(b+1,b+1+m);
    //pre(i) : Tong do kho cua i cuon sach dau tien
    for(int i=1; i<=m; i++) pre[i]=pre[i-1]+b[i];
    //cur(i) : trinh do ban dau toi thieu de giai i bai toan ban dau
    for(int i=1; i<=m; i++){
        cur[i]=b[i]-pre[i-1];
        cur[i]=max(cur[i],cur[i-1]);
    }
    for(int i=1; i<=n; i++)
    {
        long long pos=bs(0,m,a[i]);
        //dap an : a + tong do kho cua cac bai giai duoc
        cout << a[i]+pre[pos] << ' ';
    }
}

Không có nhận xét nào:

Đăng nhận xét

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.