#include<stdio.h>
#include<string.h>
typedef long long LL;
const int N=1e6+10;
int n,g;
int y,x,w,h;
int a[N];
int main()
{
int T;scanf("%d",&T);
while(T--)
{
LL sum=0;
scanf("%d",&n);
memset(a,0,sizeof(a));
scanf("%d",&g);
for(int i=1;i<=g;i++)
{
scanf("%d%d%d%d",&x,&y,&w,&h);
a[x]+=h;
a[x+w]-=h;
sum+=(LL)w*h;
}
LL bot=(sum+1)/2;
LL tmp=0;
int add=0;
for(int i=1;i<n;i++)
{
add+=a[i];
tmp+=add;
//一旦达到了条件1,我们就在满足条件2的情况下尽可能右移分界线
if(tmp>=bot)
{
while(++i<n)
{
add+=a[i];
if(add)break;
}
printf("%d\n",i);
break;
}
【hihocoder1249 2015北京赛区A】【打标记线性扫描法】 Xiongnu's Land 土地划分使得左边比右边大且尽可能接近
最新推荐文章于 2018-11-08 14:57:52 发布
本文介绍了如何使用打标记线性扫描法解决土地划分问题,确保横坐标左侧绿洲面积大于等于右侧,并使两侧面积尽可能接近。通过对绿洲坐标进行标记和线性扫描,可以有效地在O(Tn)的时间复杂度内完成计算。
摘要由CSDN通过智能技术生成