Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <vector>
- #include <set>
- #include <queue>
- #include <map>
- #include <string>
- #include <cmath>
- #include <functional>
- #include <algorithm>
- #include <utility>
- #include <stack>
- #include <unordered_map>
- #include <iterator>
- #define paii pair<ll,ll>
- #define ll long long
- using namespace std;
- int main()
- {
- ios_base::sync_with_stdio(0);
- cin.tie(0), cout.tie(0);
- int n; cin >> n;
- map <int, int> o;
- map <int, int > l;
- map <int, int> r;
- for (int i = 0; i < n; ++i)
- {
- int x; cin >> x;
- if (i + 1 - x <= 0) return cout << "NO", 0;
- o[i + 1] += x;
- l[i + 1] = x;
- }
- for (int i = 0; i < n; ++i)
- {
- int x; cin >> x;
- if (i+1 + x > n) return cout << "NO", 0;
- o[i + 1] += x;
- r[i + 1] = x;
- }
- vector < pair<int,int> > vec;
- vector <int> line(n+1);
- for (auto el : o)
- {
- vec.push_back(make_pair(el.first, el.second));
- }
- sort(vec.begin(), vec.end(), [](auto x, auto x1) {return x.second > x1.second; });
- int ct = 0 , pred = -1;
- for (auto el : vec)
- {
- if (pred != el.second) ++ct;
- line[el.first] = ct;
- pred = el.second;
- }
- for (int i = 1; i <= n; ++i)
- {
- int co = 0 , cod = 0;
- for (int j = i; j <= n; ++j)
- {
- if (line[j] > line[i]) ++co;
- }
- for (int j = i; j >= 1; --j)
- {
- if (line[j] > line[i]) ++cod;
- }
- if (co != r[i] || cod != l[i]) return cout << "NO", 0;
- }
- cout << "YES" << endl;
- for (auto el : line)
- {
- if ( el != 0)
- cout << el << " ";
- }
- return 0; //||
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement