Submission #1297534

#TimeUsernameProblemLanguageResultExecution timeMemory
1297534samarthkulkarniTopical (NOI23_topical)C++20
100 / 100
504 ms98984 KiB
// noi 2023 final round
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define vi vector<long long>
#define all(x) x.begin(), x.end()
#define endl "\n"
#define pr pair<ll, ll>
#define ff first
#define ss second

void solution();
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    solution();
    return 0;
}



void solution() {
	ll n, k; cin >> n >> k;

	vi cnt(n);

	vector<vector<pr>> a(k);
	vector<vi> b(n, vi(k));

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < k; j++) {
			ll x; cin >> x;
			a[j].push_back({x, i});
		}
	}

	for (int i = 0; i < k; i++) {
		sort(all(a[i]), greater<pr>());

	}

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < k; j++) {
			cin >> b[i][j];
		}
	}

	set<ll> avl;
	vi curr(k);

	for (int i = 0; i < k; i++) {
		while (a[i].size() > 0 && a[i].back().ff <= curr[i]) {
			cnt[a[i].back().ss]++;
			if (cnt[a[i].back().ss] == k) avl.insert(a[i].back().ss);
			a[i].pop_back();
		}
	}


	ll ans = 0;

	while (avl.size() > 0) {
		ans++;
		ll i = *avl.begin();
		avl.erase(avl.begin());

		for (int j = 0; j < k; j++) {
			curr[j] += b[i][j];
		}

		for (int j = 0; j < k; j++) {
			while (a[j].size() > 0 && a[j].back().ff <= curr[j]) {
				cnt[a[j].back().ss]++;
				if (cnt[a[j].back().ss] == k) avl.insert(a[j].back().ss);
				a[j].pop_back();
			}
		}


	}

	cout << ans << endl;




}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...