Submission #1238689

#TimeUsernameProblemLanguageResultExecution timeMemory
1238689ricardsjansonsMosaic (IOI24_mosaic)C++20
48 / 100
84 ms15944 KiB
#include "mosaic.h" #include <bits/stdc++.h> #define ll long long using namespace std; const int N=2e5+5; int n,pd[N*2]{},px[2][N]; int f(int i,int j){ int x=min(i,j); x-=2; i-=x; j-=x; return n-i-1+j; } ll cnt(int i,int l,int r){ int d=f(i,l); return pd[d+r-l]-pd[d-1]; } int getpx(int i,int l,int r){ return px[i][r]-(l?px[i][l-1]:0); } vector<long long>mosaic(vector<int>x,vector<int>y, vector<int>t,vector<int>b, vector<int>l,vector<int>r){ n=x.size(); int q=t.size(); for(int i=0;i<n;i++){ px[0][i]=x[i]; if(i){ px[0][i]+=px[0][i-1]; } } vector<int>x1(n),y1(n); if(n>1){ px[1][0]=x1[0]=y[1]; for(int i=1;i<n;i++){ px[1][i]=x1[i]=(x1[i-1]==0&&x[i]==0); px[1][i]+=px[1][i-1]; } y1[0]=x[1]; for(int i=1;i<n;i++){ y1[i]=(y1[i-1]==0&&y[i]==0); } } if(n>2){ int prv=y1[2]; for(int i=2;i<n;i++){ pd[f(2,i)]=prv=(prv==0&&x1[i]==0); } prv=x1[2]; for(int i=2;i<n;i++){ pd[f(i,2)]=prv=(prv==0&&y1[i]==0); } for(int i=1;i<=n*2;i++){ pd[i]+=pd[i-1]; } } vector<ll>c(q, 0); for(int i=0;i<q;i++){ if(t[i]==0){ c[i]=getpx(0,l[i],r[i]); continue; } if(t[i]==1){ c[i]=getpx(1,l[i],r[i]); continue; } if(l[i]==0){ c[i]+=y[t[i]]; l[i]++; } if(l[i]==1&&l[i]<=r[i]){ c[i]+=y1[t[i]]; l[i]++; } if(l[i]<=r[i]){ c[i]+=cnt(t[i],l[i],r[i]); } } return c; }
#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...