Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <cstdio>
- #include <algorithm>
- #include <iostream>
- #include <vector>
- #define ff first
- #define ss second
- using namespace std;
- bool condLeft(int x, vector<pair<int,char>>m)
- {
- int n = m.size();
- for (int i = 0; i < n; i++)
- {
- if (m[i].ss == 'R' && x < 1) return false;
- else if (m[i].ss == 'Y' && x + 1 > m[i].ff) return false;
- else if (m[i].ss == 'G' && 2 * x + 1 > m[i].ff) return false;
- }
- return true;
- }
- bool condRight(int x, vector<pair<int, char>>m)
- {
- int n = m.size();
- for (int i = 0; i < n; i++)
- {
- if (m[i].ss == 'R' && x < m[i].ss) return false;
- else if (m[i].ss == 'Y' && 2*x < m[i].ff) return false;
- else if (m[i].ss == 'G' && 3 * x < m[i].ff) return false;
- else if (m[i].ss == 'Z' && 3 * x + 1 > m[i].ff) return false;
- }
- return true;
- }
- int binSearchLeft(vector<pair<int, char>>m)
- {
- int l = 0, r = 2 * 1e9 + 1;
- while (r-l!=1)
- {
- int mid = (l + r) / 2;
- if (condLeft(mid,m)) l = mid;
- else r = mid;
- }
- return r;
- }
- int binSearchRight(vector<pair<int, char>>m)
- {
- int l = 0, r = 2 * 1e9 + 1;
- while (r - l != 1)
- {
- int mid = (l + r) / 2;
- if (condRight(mid, m)) l = mid;
- else r = mid;
- }
- return r;
- }
- int main()
- {
- int n,a;
- cin >> n;
- char r;
- vector<pair<int, char>> m;
- for (int i = 0;i<n;i++)
- {
- cin >> a >> r;
- m.push_back(make_pair(a, r));
- }
- int left = binSearchLeft(m);
- int right = binSearchRight(m);
- if (left > right) cout << "-1";
- else cout << left << ' ' << right;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement