Submission #1204295

#TimeUsernameProblemLanguageResultExecution timeMemory
1204295perekopskadMosaic (IOI24_mosaic)C++20
22 / 100
254 ms207996 KiB
#include "mosaic.h"
#include <vector>
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define ff first
#define ss second
#define pii pair <ll, ll>
#define el '\n'
#define fr(i, l, r) for(ll (i) = l; (i) <= r; (i)++)
#define frb(i, r, l) for(ll (i) = r; (i) >= l; (i)--)

ll const N = 5e3 + 100;

ll pref[N][N];

ll f(ll a, ll b) {
    if(a < 0 || b < 0)
        return 0;
    return pref[a][b];
}

std::vector<long long> mosaic(std::vector<int> X, std::vector<int> Y, std::vector<int> T, std::vector<int> B, std::vector<int> L, std::vector<int> R) {
    int Q = (int)T.size();
    int N = (int)X.size();

    fr(i, 0, N - 1)
        pref[0][i] = X[i];
        
    fr(i, 0, N - 1)
        pref[i][0] = Y[i];

    fr(i, 1, N - 1) {
        fr(j, 1, N - 1) {
            ll val = pref[i - 1][j] | pref[i][j - 1];
            val ^= 1;
            pref[i][j] = val;
        }
    }

    fr(i, 0, N - 1) {
        fr(j, 0, N - 1) {
            if(i)
                pref[i][j] += pref[i - 1][j];
            if(j)
                pref[i][j] += pref[i][j - 1];
            if(i && j)
                pref[i][j] -= pref[i - 1][j - 1];
        }
    }

    vector <ll> ans(Q);
    fr(i, 0, Q - 1) {
        ans[i] += f(B[i], R[i]);
        ans[i] -= f(T[i] - 1, R[i]);
        ans[i] -= f(B[i], L[i] - 1);
        ans[i] += f(T[i] - 1, L[i] - 1);
    }

    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...