Problem Müəllifi: | De3b0o |
Hazırlayan: | De3b0o |
Redaktə edən: | Hasan Saleh (MathModel) |
Həll
Əgər başlanğıcda iki insan eyni mərtəbəni paylaşırsa, onda cavab dərhal YOX-dur. Əks halda, biz həmişə bütün insanların hədəflərinə çatmasını təmin edə bilərik, ən yüksək mərtəbədən başlayan insanla, əgər l_i \le l_j və r_j \ge r_i olan iki insan yoxdursa.
Beləliklə, l_i \le l_j və r_j \ge r_i olan bir cüt olub-olmadığını yoxlamaq kifayətdir, bunu insanlar l_i-ya əsasən sıralanaraq və r_i dəyərlərinin sıralanıb-sıralanmadığını yoxlayaraq edə bilərik.
Çətinlik \mathcal{O}(n \cdot \log(n)).
#include <bits/stdc++.h>
#define ll long long
#define F first
#define S second
#define in insert
#define pb push_back
#define d3 ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define cans cout << ans << "\n";
#define yes cout << "BƏLİ" << "\n";
#define no cout << "YOX" << "\n";
#define pll pair<ll, ll>
#define lin cout << "\n";
#define mid ((l + r) / 2)
#define lc (2 * x)
#define rc (2 * x + 1)
#define double long double
using namespace std;
mt19937 rnd(time(0));
const ll N = 2e6+9;
ll n;
pll a[N];
int main()
{
d3
ll T = 1;
cin >> T;
while(T--)
{
cin >> n;
for(int i = 1 ; n>=i ; i++)
cin >> a[i].F;
for(int i = 1 ; n>=i ; i++)
cin >> a[i].S;
sort(a+1,a+n+1);
a[0]={-1e10,-1e10};
bool g = 1;
for(int i = 1 ; n>=i ; i++)
{
if(a[i].F==a[i-1].F||a[i].S<=a[i-1].S)
g=0;
}
if(g)
yes
else
no
}
}