Submission #1160299

#TimeUsernameProblemLanguageResultExecution timeMemory
1160299SmuggingSpunMosaic (IOI24_mosaic)C++20
29 / 100
213 ms106424 KiB
#include<bits/stdc++.h>
#include "mosaic.h"
using namespace std;
typedef long long ll;
vector<ll>mosaic(vector<int>X, vector<int>Y, vector<int>T, vector<int>B, vector<int>L, vector<int>R){
    int n = X.size(), q = T.size();
    vector<ll>ans(q);
    if(n <= 5000){
        vector<vector<int>>f(n + 1, vector<int>(n + 1, 0));
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= n; j++){
                if(i == 1){
                    f[i][j] = X[j - 1];
                }
                else if(j == 1){
                    f[i][j] = Y[i - 1];
                }
                else{
                    f[i][j] = (f[i][j - 1] | f[i - 1][j]) ^ 1;
                }
            }
        }
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= n; j++){
                f[i][j] += f[i][j - 1] + f[i - 1][j] - f[i - 1][j - 1]; 
            }
        }
        for(int i = 0; i < q; i++){
            ans[i] = f[B[i] + 1][R[i] + 1] - f[B[i] + 1][L[i]] - f[T[i]][R[i] + 1] + f[T[i]][L[i]];
        }
    }
    else if(*max_element(B.begin(), B.end()) == 0){
        for(int i = 1; i < n; i++){
            X[i] += X[i - 1];
        }
        for(int i = 0; i < q; i++){
            ans[i] = X[R[i]] - (L[i] == 0 ? 0 : X[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...