首页 > 其他分享 >[ARC179E] Rectangle Concatenation

[ARC179E] Rectangle Concatenation

时间:2024-08-10 19:38:00浏览次数:6  
标签:wedge int sum ARC179E Concatenation 300010 vis Rectangle

My Blogs

[ARC179E] Rectangle Concatenation

唐完了。

稍微观察一下发现矩形只有两种形态。考虑暴力:从每个 \(i\) 开始向后扫,设 \(f_{j,0}\) 表示能否拼在左右,\(f_{j,1}\) 表示能否拼在上下。设 \(S_{l,r}\) 表示 \([l,r]\) 内矩形的面积和,没想到用面积判就败了:

\[\begin{aligned} f_{j,0}=(f_{j-1,0}\wedge x_j=x_{j-1})\vee(f_{j-1,1}\wedge S(i,j-1)=y_{j-1}x_j)\\ f_{j,1}=(f_{j-1,1}\wedge y_j=y_{j-1})\vee(f_{j-1,0}\wedge S(i,j-1)=x_{j-1}y_j)\\ \end{aligned} \]

考虑优化:把 \(j\) 从左向右扫,维护合法的 \(i\)。设 \(S_0\) 表示 \(f_{j,0}\) 合法的 \(i\) 集合,\(S_1\) 同理。发现 \(j+1\) 的时候,观察式子左半部分,\(S_0,S_1\) 可能会做一个清空操作。

右半部分看成面积前缀和相减,合法的 \(i\) 是唯一的。是一个单点加入,容易维护。还需要拿一个桶维护 \(|S_0\cup S_1|\)。时间复杂度 \(\mathcal O(n\log n)\) 或者 \(\mathcal O(n)\)。

int n,s[300010],vis[300010],f0[300010],f1[300010],ans,sum;
pii a[300010];
inline void add(int x){sum+=!vis[x]++;}
inline void del(int x){sum-=!--vis[x];}
map<int,int> hash;
inline void mian()
{
	read(n),hash[0]=0;vi v0,v1;
	for(int i=1;i<=n;++i)read(a[i].fi,a[i].se),s[i]=s[i-1]+a[i].fi*a[i].se,hash[s[i]]=i;
	ans=1,add(1),add(1),v0.eb(1),v1.eb(1),f0[1]=f1[1]=1;
	for(int i=2;i<=n;++i)
	{
		int va0=1;
		if(hash.find(s[i-1]-a[i].se*a[i-1].fi)!=hash.end())va0=f0[hash[s[i-1]-a[i].se*a[i-1].fi]+1];
		int va1=1;
		if(hash.find(s[i-1]-a[i].fi*a[i-1].se)!=hash.end())va1=f1[hash[s[i-1]-a[i].fi*a[i-1].se]+1];
		if(a[i].fi!=a[i-1].fi){for(auto p:v0)del(p),f0[p]=0;v0.clear();}
		if(a[i].se!=a[i-1].se){for(auto p:v1)del(p),f1[p]=0;v1.clear();}
		int S=s[i-1]-a[i].fi*a[i-1].se;
		if(hash.find(S)!=hash.end()&&!f0[hash[S]+1]&&va1)
		add(hash[S]+1),v0.eb(hash[S]+1),f0[hash[S]+1]=1;
		S=s[i-1]-a[i].se*a[i-1].fi;
		if(hash.find(S)!=hash.end()&&!f1[hash[S]+1]&&va0)
		add(hash[S]+1),v1.eb(hash[S]+1),f1[hash[S]+1]=1;
		if(!f0[i])add(i),v0.eb(i),f0[i]=1;
		if(!f1[i])add(i),v1.eb(i),f1[i]=1;
		ans+=sum;
	}
	write(ans);
}

标签:wedge,int,sum,ARC179E,Concatenation,300010,vis,Rectangle
From: https://www.cnblogs.com/WrongAnswer90/p/18352711

相关文章

  • [EC Final 2022] Rectangle
    link。数据结构好题,写死我了QwQ……这个题是可以用segbeats做到\(O(n\logn)\)的。先离散化。我们只用考虑三条竖线和两竖一横的情况。三条竖线线性DP一下就行了。两竖一横的情况可以考虑枚举更靠后的那条竖线,首先这条竖线后面还没有被覆盖的区间就只能用横线覆盖了,于......
  • Gym102788,B - Rectangles题解
    水水水~题目链接戳我分析首先根据题目条件可得式子=>\((x-2)(y-2)=n(2x+2y-4)\)化简式子可得\[\begin{align}(x-2)(y-2)=&n(2x+2y-4)\\xy-2x-2y+4=&2nx+2ny-4n\\x(y-2n-2)=&2ny-4n-4+2y\\x=&\frac{2ny-4n-4......
  • Solution - Atcoder YPC2019E Odd Subrectangles
    首先对于\(0/1\)和为奇数,转化为异或为\(1\)来考虑。考虑如果已经确定了行的选取,又该如何计数。考虑对于每一列,都处理好在对应行的位置的异或值。然后记\(\operatorname{c}_0,\operatorname{c}_1\)表示列异或值为\(0/1\)的数量。知道了\(\operatorname{c}_0,\op......
  • [University CodeSprint 4] Drawing Rectangles (扫描线 + 最小点覆盖)
    [UniversityCodeSprint4]DrawingRectangles扫描线+最小点覆盖题目的形式一看就是扫描线,观察到矩形的并面积\(\le3\times10^5\),所以可以直接把这些位置找出来。这部分的复杂度是\(O(n\logn)\)。然后剩下的部分就是一个经典的最小点覆盖问题。具体的说,构造二分图,左边代......
  • WPF Rectangle ellipse
    <Windowx:Class="WpfApp185.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • WPF Path LineGeometry,RectangleGeometry,EllipseGeometry
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Runtime.CompilerServices;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows......
  • WPF RenderTargetBitmap DrawingVisual DrawingContext DrawImage DrawRectangle Draw
    usingSystem;usingSystem.Collections.Generic;usingSystem.Globalization;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;......
  • 赛克oj The diameter of a rectangle(笛卡尔树)
    赛氪OJ-专注于算法竞赛的在线评测系统(saikr.com)这题是hduoj1506的加强版,区别在于宽度不是固定为1了,思路差不多,也是使用笛卡尔树。参考hduoj1506(笛卡尔树)-Venux-博客园(cnblogs.com)1#defineIOstd::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)2#definebu......
  • CF1198E Rectangle Painting
    传送门题意:\(10^9\times10^9\)的白色平面上,给定\(m\le50\)个矩形将其涂黑。每次可以选\(\min(h,w)\)的代价将一个\(h\timesw\)的矩形涂白,问涂成全白的最小代价。可以看作每次涂一整条或一整列。如果不是\(10^9\)的范围,可以直接上二分图最小点覆盖了。但是这里我......
  • [ABC223E] Placing Rectangles 题解
    [ABC223E]PlacingRectangles题解思路解析根据题目可知,其实三个长方形无非只有以下两种摆放方式。若大长方形长为\(y\),宽为\(x\),则我们对于第一种情况就固定住宽,判断能否使长度小于等于长;对于第二种情况同样固定住宽,此时A长方形右边空间的长就确定了,就只需要判断B,C......