This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("-O3")
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("fast-math")
//#pragma GCC optimize("no-stack-protector")
#define F first
#define S second
#define sz(x) ll(x.size())
#define pb push_back
#define N 100005
#define MOD ll(998244353)
using namespace std;
using namespace __gnu_pbds;
typedef long double ld;
typedef long long ll;
typedef short int si;
typedef tree <int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
ordered_set se, st;
set <pair <ll, ll> > ser, dob;
ll mx[N], mn[N], n;
void upd(ll x)
{
while (sz(ser) > 0 && (*ser.begin()).F <= x)
{
se.erase((*ser.begin()).S);
st.erase(n - (*ser.begin()).S - 1);
ser.erase(ser.begin());
}
while (sz(dob) > 0 && (*dob.begin()).F <= x)
{
se.insert((*dob.begin()).S);
st.insert(n - (*dob.begin()).S - 1);
dob.erase(dob.begin());
}
}
int main()
{
//freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
ios_base::sync_with_stdio(0); istream::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n;
ll a[n][4];
for (ll i = 0; i < n; i++) {cin >> a[i][0]; if (a[i][0] == -1) a[i][0] = n; mx[i] = 1e9; mn[i] = 1e9;}
for (ll i = 0; i < n; i++) {cin >> a[i][1]; if (a[i][1] == -1) a[i][1] = n;}
for (ll i = 0; i < n; i++) {cin >> a[i][2]; if (a[i][2] == -1) a[i][2] = n;}
for (ll i = 0; i < n; i++) {cin >> a[i][3]; if (a[i][3] == -1) a[i][3] = n;}
ll ans = 0;
for (ll i = 0; i < n; i++)
{
se.insert(i);
st.insert(i);
ser.insert({a[i][2] + 1, i});
dob.insert({max(a[i][2] + 1, ll(n) - a[i][3] + 1), i});
ans += a[i][2];
ans += min(ll(n) - a[i][2], a[i][3]);
}
for (ll i = 0; i < n; i++)
{
upd(i + 1);
ll l = a[i][0], r = a[i][1];
r = min(r, ll(n) - l);
ans += l - se.order_of_key(l);
ans += r - st.order_of_key(r);
}
for (ll i = 0; i < n; i++)
{
if (a[i][2] == n) continue;
ll x = a[i][2];
ans++;
mn[x] = min(mn[x], i);
mx[x] = min(mx[x], ll(n) - i - 1);
if (a[i][2] + a[i][3] + 1 != n)
{
ll x = n - a[i][3] - 1;
ans++;
mn[x] = min(mn[x], i);
mx[x] = min(mx[x], ll(n) - i - 1);
}
}
for (ll i = 0; i < n; i++)
{
if (a[i][0] == n) continue;
if (mn[i] > a[i][0]) ans++;
if (a[i][0] + a[i][1] + 1 != n)
{
if (mx[i] > a[i][1]) ans++;
}
}
if (ans >= n * n) cout << "DA" << endl;
else cout << "NE" << endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |