Submission #1313509

#TimeUsernameProblemLanguageResultExecution timeMemory
1313509prunjuiceTopical (NOI23_topical)C++20
100 / 100
408 ms136580 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define MAX LLONG_MAX
#define MIN LLONG_MIN
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define pb push_back
#define pf push_front
const int mod = 1e9 + 7;
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n, m;
    cin >> n >> m;
    int ans = 0;
    int idx = 0;
    vector <vector <int>> v (n, vector <int> (m)); // knowledge required
    vector <vector <int>> v2 (n, vector <int> (m)); // knowledge gained
    vector <int> v3 (n); // topics
    vector <int> v4 (m, 0); // sliding window
    vector <int> v5 (m, 0); // current knowledge
    vector <bool> v6 (n, false); // used
    deque <vector <pair <int, int>>> dq (m);
    deque <int> dq2;
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++){
            cin >> v[i][j];
        }
    }
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++){
            cin >> v2[i][j];
        }
    }
    for (int i = 0; i < m; i++){
        for (int j = 0; j < n; j++){
            dq[i].pb({v[j][i], j});
        }
    }
    for (int i = 0; i < m; i++){
        sort (dq[i].begin(), dq[i].end());
    }
    for (int i = 0; i < m; i++){
        while (v4[i] < n && dq[i][v4[i]].fi <= v5[i]){
            v3[dq[i][v4[i]].se] += 1;
            if (v3[dq[i][v4[i]].se] == m){
                dq2.pb(dq[i][v4[i]].se);
            }
            v4[i] += 1;
        }
    }
    while (!dq2.empty()){
        idx = dq2.front();
        dq2.pop_front(); 
        if (v6[idx]){
            continue;
        }
        v6[idx] = true;
        ans += 1;
        for (int i = 0; i < m; i++){
            v5[i] += v2[idx][i];
            while (v4[i] < n && dq[i][v4[i]].fi <= v5[i]){
                v3[dq[i][v4[i]].se] += 1;
                if (v3[dq[i][v4[i]].se] == m){
                    dq2.pb(dq[i][v4[i]].se);
                }
                v4[i] += 1;
            }
        }
    }
    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...