Submission #1312135

#TimeUsernameProblemLanguageResultExecution timeMemory
1312135eri16Mosaic (IOI24_mosaic)C++20
0 / 100
76 ms27440 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

vector<ll> mosaic(vector<int> X, vector<int> Y,vector<int> T, vector<int> B,vector<int> L, vector<int> R){
    
    ll n = X.size();
    
    ll row[3][200005];
    ll column[3][200005];
    
    for (int i=0; i<n; i++){row[0][i]=X[i];}
    for (int i=0; i<n; i++){column[0][i]=Y[i];}
    
    if (n>1){
        row[1][0]=column[0][1];
        column[1][0]=row[0][1];
        for (int i=1; i<n; i++){row[1][i]=1-(row[1][i-1] | row[0][i]);}
        for (int i=1; i<n; i++){column[1][i]=1-(column[1][i-1] | column[0][i]);}
    }
    if (n>2){
        row[2][0]=column[0][2];
        column[2][0]=row[0][2];
        for (int i=1; i<n; i++){row[2][i]=1-(row[2][i-1] | row[1][i]);}
        for (int i=1; i<n; i++){column[2][i]=1-(column[2][i-1] | column[1][i]);}
    }
    
    vector <ll> dp_row(n,0);
    vector <ll> dp_col(n,0);    
    
    if (n>2){
    
        for (int i=1; i<n; i++){dp_row[i]=dp_row[i-1]+row[2][i];}
        for (int i=1; i<n; i++){dp_col[i]=dp_col[i-1]+column[2][i];}
        
    }
    
    vector <ll> dp_row_0(n+1,0);
    vector <ll> dp_row_1(n+1,0);
    
    if (n>2){
        
        for (int i=1; i<n; i++){dp_row_0[i]=dp_row_0[i-1]+row[0][i];}
        for (int i=1; i<n; i++){dp_row_1[i]=dp_row_1[i-1]+row[1][i];}
        
    }
    
    
    ll q = T.size();
    
    vector <ll> ans;
    
    ll t,b,l,r;
    
    //for (auto x : dp_row_1){cout<<x<<' ';}cout<<"\n";
    //for (auto x: row[1]){cout<<x<<' ';}cout<<"\n";
    
    for (int i=0; i<q; i++){
        
        t=T[i];
        b=B[i];
        l=L[i];
        r=R[i];
        
        ll sm=0;
        
        if (l==0)sm+=column[t][0];
        if (l<=1 && n>1)sm+=column[t][1];
        if (l<=2 && n>2)sm+=column[t][2];
        
        l=max(2LL,l);
        
        if (t<=2){
            l++;
            if (t==0){sm=sm+dp_row_0[r]-dp_row_0[l-1];}
            if (t==1){sm=sm+dp_row_1[r]-dp_row_1[l-1];}
            if (t==2){sm=sm+dp_row[r]-dp_row[l-1];}
        }
        
        else if (n>2 && r>l){
            if (t>=r){
                sm+=dp_col[t+2-l]-dp_col[t+2-r];   
            }
            
            else if (t<=l){
                sm+=dp_row[t+2-r]-dp_row[t+2-l];
            }
            
            else {
                sm+=dp_col[t+2-l]-dp_col[1];
                sm+=dp_row[t+2-r]-dp_col[1];
                sm+=row[2][2];
            }
        }
        ans.push_back(sm);
    }
    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...