Submission #1242356

#TimeUsernameProblemLanguageResultExecution timeMemory
1242356dostsMosaic (IOI24_mosaic)C++20
12 / 100
1119 ms655012 KiB
#include "mosaic.h" #include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2") #define int long long #define pii pair<int,int> #define vi vector<int> #define ff first #define ss second #define sp << " " << #define all(x) x.begin(),x.end() #define big(x) ((int)(x.size())) using namespace std; const int MOD = 1e9+7, LIM = 1e6+1, inf = 2e9; vi mosaic(vector<int32_t> X, vector<int32_t> Y, vector<int32_t> T, vector<int32_t> B, vector<int32_t> L, vector<int32_t> R) { int N = X.size(); int Q = L.size(); int until = min(N-1,200ll); vector<vi> rows(until+1,vi(N)); vector<vi> cols(until+1,vi(N)); for (int i = 0;i<N;i++) rows[0][i] = X[i],cols[0][i] = Y[i]; for (int ii = 1;ii<=until;ii++) { rows[ii][0] = Y[ii]; cols[ii][0] = X[ii]; for (int i = 1;i<N;i++) rows[ii][i] = (!rows[ii][i-1] && !rows[ii-1][i]); for (int i = 1;i<N;i++) cols[ii][i] = (!cols[ii][i-1] && !cols[ii-1][i]); } map<int,int> mp; for (int i = 0;i<=until;i++) { for (int j = 0;j<N;j++) { if (rows[i][j]) mp[i-j] = 1; if (cols[i][j]) mp[j-i] = 1; } } for (int i = 0;i<=until;i++) { for (int j = 1;j<N;j++) rows[i][j] += rows[i][j-1],cols[i][j]+=cols[i][j-1]; } auto sm = [&](vi& v,int l,int r) -> int { if (!l) return v[r]; return v[r]-v[l-1]; }; vi ansy(Q); for (int ii = 0;ii<Q;ii++) { int ans = 0; while (L[ii] <= until && L[ii] <= R[ii]) { ans+=sm(cols[L[ii]],T[ii],B[ii]); L[ii]++; } while (T[ii] <= until && T[ii] <= B[ii]) { ans+=sm(rows[T[ii]],L[ii],R[ii]); T[ii]++; } for (int i = T[ii]-R[ii];i <= B[ii]-L[ii];i++) { ans+=mp[i]; } ansy[ii] = ans; } return ansy; }
#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...