Submission #912892

#TimeUsernameProblemLanguageResultExecution timeMemory
912892vjudge1Topical (NOI23_topical)C++17
100 / 100
789 ms83296 KiB
/******************************************************************************

                              Online C++ Compiler.
               Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <bits/stdc++.h>
#define ll  long long
#define pll pair<ll,ll>
#define ff first
#define ss second
#define pb push_back
using namespace std;

int main()
{
    int n,k;
    cin>>n>>k;
    vector<pair<int,int>> arr[k];
    for(int i = 0;i<n;i++){
        for(int j =0 ;j<k;j++){
            int x;
            cin>>x;
            arr[j].pb({x,i});
        }
    }
    vector<vector<int>> u(n+1,vector<int>(k));
    for(int i = 0;i<n;i++){
        for(int j =0;j<k;j++)cin>>u[i][j];
    }
    for(int i =0;i<k;i++)u[n][i]=0;
    vector<int> currK(k,0);
    queue<int> q;
    q.push(n);
    vector<int> cntTop(n+1,0);
    int cnt = -1;
    for(int i = 0;i<k;i++)sort(arr[i].begin(),arr[i].end(),greater<pair<int,int>>());
    while(!q.empty()){
        int curr = q.front();
        q.pop();
        cnt++;
        for(int i =0;i<k;i++){
            currK[i]+=u[curr][i];
            while(!arr[i].empty()&&currK[i]>=arr[i].back().ff){
                cntTop[arr[i].back().ss]++;
                if(cntTop[arr[i].back().ss]==k)q.push(arr[i].back().ss);
                arr[i].pop_back();
            }
        }
    }
    cout<<cnt;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...