ci 表示关闭第 i 个农场的时间,ti 表示到第 i 个农场的初始时间,用 latei 要想在关闭前到达第 i 个农场的最晚时间,此时我们只需要把 late 数组从大到小排序即可,只要看第 v 个是否能按时到达即可。因为数组有序,如果能到达,说明所有比他小的农场都可以到达。
#include<bits/stdc++.h> using namespace std; int n,q; int c[200005],t[200005]; int late[200005]; int main(){cin >> n >> q;for(int i=1;i<=n;i++)cin >> c[i];//关闭时间 //3 5 7 9 12 for(int i=1;i<=n;i++)cin >> t[i];//初始访问时间 //4 2 3 3 8for(int i=1;i<=n;i++)late[i] = c[i] - t[i];//最晚到达时间 //-1,3,4,6,4 sort(late+1,late+1+n);//排序reverse(late+1,late+1+n);for(int i=1;i<=q;i++){int v,s;cin >> v >> s;if(s < late[v]) cout << "YES";//表示能够到达 elsecout << "NO";cout << endl;} return 0; }