Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll int
- #define pb push_back
- #define task "PARRAY"
- #define pll pair<ll, ll>
- #define pii pair<pll, ll>
- #define fi first
- #define se second
- using namespace std;
- const int mod = 1e9+7;
- const int N = 3e5+5;
- const int base = 313;
- int n, m, t, k, T, ans, tong, c[N], lab[N], st[N*4], lazy[N*4];
- int a[N], b[N], d[N];
- vector<pll> adj[N];
- vector<ll> kq;
- string s;
- void down(ll id)
- {
- if(lazy[id] == mod)return;
- st[id*2] = min(st[id*2], lazy[id]);
- st[id*2+1] = min(st[id*2+1], lazy[id]);
- lazy[id*2] = min(lazy[id*2], lazy[id]);
- lazy[id*2+1] = min(lazy[id*2+1], lazy[id]);
- lazy[id] = mod;
- }
- void update(ll id, ll l, ll r, ll u, ll v, ll val)
- {
- if(u <= l && r <= v)
- {
- st[id] = min(st[id], val);
- lazy[id] = min(lazy[id], val);
- return;
- }
- if(u > r || l > v || u > v)return;
- ll mid = (l+r)/2;
- down(id);
- update(id*2, l, mid, u, v, val);
- update(id*2+1, mid+1, r, u, v, val);
- st[id] = max(st[id*2], st[id*2+1]);
- }
- ll get(ll id, ll l, ll r, ll u, ll v)
- {
- if(u <= l && r <= v)return st[id];
- if(u > r || l > v || u > v)return 0;
- ll mid = (l+r)/2;
- down(id);
- return max(get(id*2, l, mid, u, v), get(id*2+1, mid+1, r, u, v));
- }
- void sol()
- {
- cin >> n;
- m = 0;
- fill_n(d, n+1, 0);
- for(int i = 1; i <= n; i ++)
- {
- cin >> a[i];
- b[i] = d[a[i]]+1;
- d[a[i]] = i;
- }
- fill_n(st, n*4+4, mod);
- fill_n(lazy, n*4+4, mod);
- fill_n(d, n+1, n+1);
- for(int i = n; i > 0; i --)
- {
- c[i] = d[a[i]] - 1;
- d[a[i]] = i;
- //if(i < n)cout << get(1, 1, n, i+1, n) << '\n';
- if(i < n && get(1, 1, n, i+1, n) > i)
- {
- cout << "NO"<<'\n';
- return;
- }
- update(1, 1, n, i, c[i], b[i]);
- //cout << get(1, 1, n, i+1, n) << '\n';
- //cout << b[i] <<" "<<c[i] <<" "<<i<< '\n';
- }
- //cout << get(1, 1, n, 3, n) << '\n';
- cout << "YES" << '\n';
- }
- int main()
- {
- if(fopen(task".INP", "r"))
- {
- freopen(task".INP", "r", stdin);
- freopen(task".OUT", "w", stdout);
- }
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- int ntest = 1;
- cin >> ntest;
- while(ntest -- > 0)
- sol();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement