其实这道题,可以从最后一个输入的数据开始排查,如果说你找到了这个点上面有地毯,那么就直接输出这个值,如果没找到就按照题干的意思输出-1。
至于为什么 那是因为 从后面开始检查 我们可以保证当前这个点所在的这些地毯(从最后一个到第一个) 都是当前位置的最上层地毯 但是我们只能用点和长度表示地毯 所以需要检查地毯和目标点的关系
因此 如果从最后一个地毯开始检查 只要目标点满足地毯的坐标范围 就必然会是最上层的 因为不在范围的不考虑 在范围内的 必须要在最上面 数据从后往前 也就是从上到下地检查地毯啦
是一个有点投机取巧的做法x

#include <iostream>

using namespace std;

int main()
{
int n;
    cin>>n;
    int x[10005],y[10005],xlen[10005],ylen[10005],i;
    int targetx,targety;
    for(i=0;i<n;i++){
        cin>>x[i]>>y[i]>>xlen[i]>>ylen[i];
    }
    cin>>targetx>>targety;
    for(i=n-1;i>=0;i--){
        if(targetx>=x[i]&&targetx<=x[i]+xlen[i]){
        if(targety>=y[i]&&targety<=y[i]+ylen[i]){
            cout<<i+1;
                return 0;}}

    }
    cout<<-1;
}