Submission #1232640

#TimeUsernameProblemLanguageResultExecution timeMemory
1232640Muhammad_AneeqMosaic (IOI24_mosaic)C++20
12 / 100
200 ms33588 KiB
#include "mosaic.h" #include <vector> #include <algorithm> #include <set> #include <iostream> using namespace std; set<int>st; void mk(vector<int>x,vector<int>y) { int n=x.size(); int m=min(6,n); vector<vector<int>>gr(n,vector<int>(m,0)); for (int i=0;i<n;i++) gr[i][0]=y[i]; for (int i=0;i<m;i++) gr[0][i]=x[i]; for (int i=1;i<n;i++) { for (int j=1;j<m;j++) { if (gr[i-1][j]==0&&gr[i][j-1]==0) { gr[i][j]=1; st.insert(j-i); } else gr[i][j]=0; } } gr=vector<vector<int>>(m,vector<int>(n,0)); for (int i=0;i<m;i++) gr[i][0]=y[i]; for (int i=0;i<n;i++) gr[0][i]=x[i]; for (int i=1;i<m;i++) { for (int j=1;j<n;j++) { if (gr[i-1][j]==0&&gr[i][j-1]==0) { gr[i][j]=1; st.insert(j-i); } else gr[i][j]=0; } } } vector<long long> mosaic(vector<int> X, vector<int> Y,vector<int> T, vector<int> B,vector<int> L, vector<int> R) { int q=T.size(); vector<long long>ans; int n=X.size(); int prex[n+1]={},prey[n+1]={}; for (int i=0;i<n;i++) { prex[i+1]=prex[i]+X[i]; prey[i+1]=prey[i]+Y[i]; } if (prex[n]==0&&prey[n]==0) { for (int i=0;i<q;i++) { long long sm=0; if (T[i]==0) T[i]++; if (L[i]==0) L[i]++; if (T[i]>B[i]||L[i]>R[i]) { ans.push_back(0); continue; } long long len=(R[i]-L[i]+1); long long len1=(B[i]-T[i]+1); sm=(len*(len1))/2; if (len1%2&&len%2) { if ((T[i]+L[i])%2==0) sm++; else sm--; } ans.push_back(sm); } return ans; } mk(X,Y); vector<int>segs; for (auto i:st) segs.push_back(i); for (int i=0;i<q;i++) { long long sm=0; if (T[i]==0&&L[i]==0) { sm=prex[R[i]+1]-prex[L[i]]+prey[B[i]+1]-prey[T[i]]-X[0]; T[i]++; L[i]++; } else if (T[i]==0) { sm=prex[R[i]+1]-prex[L[i]]; T[i]++; } else if (L[i]==0) { sm=prey[B[i]+1]-prey[T[i]]; L[i]++; } for (int j=T[i];j<=B[i];j++) { if (L[i]>R[i]) break; int z=lower_bound(begin(segs),end(segs),L[i]-j)-begin(segs); int y=upper_bound(begin(segs),end(segs),R[i]-j)-begin(segs); sm+=y-z; } 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...