[USACO24FEB] Maximizing Productivity

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 8
for(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";//表示能够到达
else
cout << "NO";
cout << endl;
}
return 0;
}

浙公网安备 33010602011771号