题目:给n个矩形,让你随便输出一个能被至少n-1个矩形覆盖住的整数点坐标。
思路:拿过题来就写树状数组,写着写着突然感觉线段树更好维护些 emmm 然后快写完突然发现啥都不用也能做,智障阿,直接模拟就行了。。
#include <bits/stdc++.h>
using namespace std;
#define inf 1e9
const int maxn=132675;
struct node{
int x,xx,y,yy;
}a[maxn],suf[maxn],pre[maxn];
int n;
int main()
{
scanf("%d",&n);
int cnt=0;
for(int i=1;i<=n;i++)
scanf("%d%d%d%d",&a[i].x,&a[i].y,&a[i].xx,&a[i].yy);
pre[0].x=-inf;pre[0].y=-inf;
pre[0].xx=inf;pre[0].yy=inf;
for(int i=1;i<=n;i++)
{
pre[i].x=max(pre[i-1].x,a[i].x);
pre[i].y=max(pre[i-1].y,a[i].y);
pre[i].xx=min(pre[i-1].xx,a[i].xx);
pre[i].yy=min(pre[i-1].yy,a[i].yy);
}
suf[n+1].x=-inf;suf[n+1].y=-inf;
suf[n+1].xx=inf;suf[n+1].yy=inf;
for(int i=n;i>0;i--)
{
suf[i].x=max(suf[i+1].x,a[i].x);
suf[i].y=max(suf[i+1].y,a[i].y);
suf[i].xx=min(suf[i+1].xx,a[i].xx);
suf[i].yy=min(suf[i+1].yy,a[i].yy);
}
int x,y,xx,yy;
for(int i=1;i<=n;i++)
{
x=max(pre[i-1].x,suf[i+1].x);
y=max(pre[i-1].y,suf[i+1].y);
xx=min(pre[i-1].xx,suf[i+1].xx);
yy=min(pre[i-1].yy,suf[i+1].yy);
if(x<=xx&&y<=yy)
break;
}
printf("%d %d\n",x,y);
return 0;
}