#include<iostream> #include<map> #include<algorithm> using namespace std; struct punkt{ int wsp,kolor; }; const int mx=1e6+5; const long long mod=2877629297581607; punkt tabx[mx],taby[mx]; long long pot[mx]; int strona[mx]; long long wynx,wyny,wyn,hasz; int n,x,y,xp,xk,yp,yk,ile_dodac,skad; map<long long,int>mapa; long long najdluzszy(punkt* tx,int dlugosc){ for(int i=0;i<n;++i)strona[i]=0; hasz=0; mapa.clear(); for(int i=1;i<n;++i){ ile_dodac=tx[i].wsp-tx[i-1].wsp; skad=tx[i].kolor; if(ile_dodac!=0){ mapa[hasz]+=ile_dodac; } if(strona[skad]==0){ strona[skad]=1; hasz+=pot[skad]; if(hasz>=mod)hasz-=mod; } else{ strona[skad]=0; hasz-=pot[skad]; if(hasz<0)hasz+=mod; } } ile_dodac=tx[0].wsp+dlugosc-tx[n-1].wsp; skad=tx[0].kolor; if(ile_dodac!=0)mapa[hasz]+=ile_dodac; long long wyn=0; for(auto it=mapa.begin();it!=mapa.end();++it){ int akt=(*it).second; if(akt>wyn)wyn=akt; } return wyn; } int main(){ ios::sync_with_stdio(false); cin>>n>>x>>y; for(int i=0;i<n;++i){ cin>>xp>>yp>>xk>>yk; tabx[2*i]={xp,i}; tabx[2*i+1]={xk,i}; taby[2*i]={yp,i}; taby[2*i+1]={yk,i}; } n*=2; pot[0]=1; for(int i=1;i<n;++i){ pot[i]=29*pot[i-1]; pot[i]%=mod; } sort(tabx,tabx+n,[](punkt a,punkt b){return a.wsp<b.wsp;}); sort(taby,taby+n,[](punkt a,punkt b){return a.wsp<b.wsp;}); wynx=najdluzszy(tabx,x); wyny=najdluzszy(taby,y); wyn=wynx*wyny; cout<<wyn; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #include<iostream> #include<map> #include<algorithm> using namespace std; struct punkt{ int wsp,kolor; }; const int mx=1e6+5; const long long mod=2877629297581607; punkt tabx[mx],taby[mx]; long long pot[mx]; int strona[mx]; long long wynx,wyny,wyn,hasz; int n,x,y,xp,xk,yp,yk,ile_dodac,skad; map<long long,int>mapa; long long najdluzszy(punkt* tx,int dlugosc){ for(int i=0;i<n;++i)strona[i]=0; hasz=0; mapa.clear(); for(int i=1;i<n;++i){ ile_dodac=tx[i].wsp-tx[i-1].wsp; skad=tx[i].kolor; if(ile_dodac!=0){ mapa[hasz]+=ile_dodac; } if(strona[skad]==0){ strona[skad]=1; hasz+=pot[skad]; if(hasz>=mod)hasz-=mod; } else{ strona[skad]=0; hasz-=pot[skad]; if(hasz<0)hasz+=mod; } } ile_dodac=tx[0].wsp+dlugosc-tx[n-1].wsp; skad=tx[0].kolor; if(ile_dodac!=0)mapa[hasz]+=ile_dodac; long long wyn=0; for(auto it=mapa.begin();it!=mapa.end();++it){ int akt=(*it).second; if(akt>wyn)wyn=akt; } return wyn; } int main(){ ios::sync_with_stdio(false); cin>>n>>x>>y; for(int i=0;i<n;++i){ cin>>xp>>yp>>xk>>yk; tabx[2*i]={xp,i}; tabx[2*i+1]={xk,i}; taby[2*i]={yp,i}; taby[2*i+1]={yk,i}; } n*=2; pot[0]=1; for(int i=1;i<n;++i){ pot[i]=29*pot[i-1]; pot[i]%=mod; } sort(tabx,tabx+n,[](punkt a,punkt b){return a.wsp<b.wsp;}); sort(taby,taby+n,[](punkt a,punkt b){return a.wsp<b.wsp;}); wynx=najdluzszy(tabx,x); wyny=najdluzszy(taby,y); wyn=wynx*wyny; cout<<wyn; } |