【CCF-CSP】201403-2 窗口
題目
先給出 n 個窗口(窗口的左邊範圍),之後有 m 次點擊(即一個座標),每次點擊輸出當前座標最頂層的窗口序號,同時將當前窗口移動到最頂層。
分析
用鏈表存窗口的優先級,每次點擊按照優先級遍歷所有窗口,看自己在哪個窗口的範圍,並將找到的窗口移動到鏈表的前端。
#include <bits/stdc++.h>
using namespace std;
#define d(x) cout<<x<<endl
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int N = 20;
int n, m;
struct node {
int a, b, c, d;
} arr[N];
int main() {
scanf("%d%d", &n, &m);
list<int> l;
for (int i = 1; i <= n; i++) {
scanf("%d%d%d%d", &arr[i].a, &arr[i].b, &arr[i].c, &arr[i].d);
l.push_front(i);
}
while (m--) {
int x, y, flag = 0;
scanf("%d%d", &x, &y);
for (auto it = l.begin(); it != l.end(); it++) {
if (x >= arr[*it].a && x <= arr[*it].c && y >= arr[*it].b && y <= arr[*it].d) {
l.push_front(*it); l.erase(it);
printf("%d\n", *it); flag = 1; break;
}
}
if (flag == 0) printf("IGNORED\n");
}
return 0;
}