Submission #1251917

#TimeUsernameProblemLanguageResultExecution timeMemory
1251917Bui_Quoc_CuongGift Exchange (JOI24_ho_t4)C++20
10 / 100
244 ms60752 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> ii; typedef pair<int, ii> iii; template<class T> bool minimize(T &a, const T &b) { if (a > b) return a = b, true; return false; } template<class T> bool maximize(T &a, const T &b) { if (a < b) return a = b, true; return false; } #define FOR(i,a,b) for(int i=(a); i<=(b); ++i) #define FORD(i,a,b) for(int i=(a); i>=(int)b; i--) #define MASK(i) (1LL << (i)) #define BIT(S, i) (((S) >> (i)) & 1) #define mp make_pair #define pb push_back #define fi first #define se second #define all(x) x.begin(), x.end() const int MOD = 1e9 + 7; const int oo = 1e9 + 29032008; const ll inf = 1e18 + 29032008; const int N = 1e6 + 5; int n, q; int a[N], b[N]; void init(void) { cin >> n; FOR(i, 1, n) cin >> a[i]; FOR(i, 1, n) cin >> b[i]; cin >> q; } // Hint : chuyển [bi, ai] thành [L ... R] rồi tìm cách nối namespace sub1 { void solve() { FOR(i, 1, q) { int l, r; cin >> l >> r; vector <pair <int, int>> sweeps; FOR(j, l, r) { sweeps.push_back(make_pair(a[j], - j)); sweeps.push_back(make_pair(b[j], j)); } sort(all(sweeps)); int cnt = 0; bool have_ans = true; FOR(j, 0, (int)sweeps.size() - 1) { cnt+= (sweeps[j].se < 0 ? - 1 : 1); if (cnt == 0 && sweeps[j - 1].se == - sweeps[j].se) { have_ans = false; break; } } cout << (have_ans ? "Yes" : "No") << "\n"; } } } namespace sub2 { int lazy[4 * N], st[4 * N]; inline void apply(int id, int val) { st[id] = val; lazy[id] = val; } inline void pushDown(int id) { if (lazy[id] != 0) { apply(id << 1, lazy[id]); apply(id << 1 | 1, lazy[id]); lazy[id] = 0; } } void update(int id, int l, int r, int u, int v, int val) { if (l > v || r < u) return; if (l >= u && r <= v) { apply(id, val); return; } pushDown(id); int mid = (l + r) >> 1; update(id << 1, l, mid, u, v, val); update(id << 1 | 1, mid + 1, r, u, v, val); st[id] = max(st[id << 1], st[id << 1 | 1]); } int get(int id, int l, int r, int u, int v) { if (l > v || r < u) return - oo; if (l >= u && r <= v) return st[id]; int mid = (l + r) >> 1; pushDown(id); int getLeft = get(id << 1, l, mid, u, v); int getRight = get(id << 1 | 1, mid + 1, r, u, v); return max(getLeft, getRight); } int L[N], R[N]; vector <ii> QR[N], QL[N]; int ans[N]; void solve() { FOR(i, 1, n) { L[i] = get(1, 1, 2 * n, b[i], a[i]); update(1, 1, 2 * n, b[i], a[i], i); } FOR(i, 1, 8 * n) st[i] = lazy[i] = 0; FOR(i, 1, q) { int l, r; cin >> l >> r; QR[r].push_back(make_pair(l, i)); QL[l].push_back(make_pair(r, i)); } FOR(i, 1, n) { update(1, 1, n, i, i, - L[i]); for (ii &it : QR[i]) { int l = it.first, id = it.second; ans[id] = ! (- get(1, 1, n, l + 1, i) < l); } } FOR(i, 1, 8 * n) { st[i] = - oo; lazy[i] = 0; } FORD(i, n, 1) { R[i] = - get(1, 1, 2 * n, b[i], a[i]); update(1, 1, 2 * n, b[i], a[i], - i); } FOR(i, 1, 8 * n) st[i] = lazy[i] = 0; FORD(i, n, 1) { update(1, 1, n, i, i, R[i]); for (ii &it : QL[i]) { int r = it.first, id = it.second; ans[id] |= (! ((get(1, 1, n, i, r - 1)) > r)); } } FOR(i, 1, q) { cout << (ans[i] ? "Yes" : "No") << "\n"; } } } void process(void) { // sub1 :: solve(); sub2 :: solve(); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define task "kieuoanh" if (fopen(task".inp", "r")) { freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout); } int tc = 1; // cin >> tc; while (tc--) { init(); process(); } return 0; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:171:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  171 |         freopen(task".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:172:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  172 |         freopen(task".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...