Submission #1299900

#TimeUsernameProblemLanguageResultExecution timeMemory
1299900danglayloi1Topical (NOI23_topical)C++20
100 / 100
565 ms70740 KiB
#include <bits/stdc++.h>
#define ii pair<int, int>
#define fi first
#define se second
#define inf 0x3f3f3f3f
using namespace std;
using ll = long long;
const ll mod=1e9+7;
const int nx=1e6+5;
int n, m, cnt[nx], a[nx], b[nx], leaf[nx], res=0;
ll cur[nx];
vector<ii> ve[nx];
int rar(int x, int y)
{
    return x*m+y;
}
ii pos(int x)
{
    return {x/m, x%m};
}
ii nod[nx<<2];
void build(int id, int l, int r)
{
    if(l==r)
    {
        leaf[l]=id;
        nod[id]={cnt[l], l};
        return;
    }
    int mid=(l+r)>>1;
    build(id<<1, l, mid);
    build(id<<1|1, mid+1, r);
    nod[id]=max(nod[id<<1], nod[id<<1|1]);
}
void update(int p, int val)
{
    int id=leaf[p];
    nod[id].fi=val;
    while(id>1)
    {
        id>>=1;
        nod[id]=max(nod[id<<1], nod[id<<1|1]);
    }
}
int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin>>n>>m;
    for(int i = 0; i < n*m; i++)
    {
        cin>>a[i];
        if(a[i]==0) cnt[pos(i).fi]++;
        ve[pos(i).se].emplace_back(a[i], pos(i).fi);
    }
    for(int i = 0; i < n*m; i++)
        cin>>b[i];
    for(int i = 0; i < m; i++)
        sort(ve[i].begin(), ve[i].end(), greater<ii>());
    build(1, 0, n-1);
    while(true)
    {
        ii tmp=nod[1];
        if(tmp.fi<m) break;
        res++;
        for(int j = 0; j < m; j++)
            cur[j]+=b[rar(tmp.se, j)];
        update(tmp.se, -inf);
        cnt[tmp.se]=-inf;
        for(int j = 0; j < m; j++)
        {
            while(ve[j].size())
            {
                int x, y;
                tie(x, y)=ve[j].back();
                if(x<=cur[j]) cnt[y]++, update(y, cnt[y]), ve[j].pop_back();
                else break;
            }
        }
    }
    cout<<res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...