제출 #1190655

#제출 시각아이디문제언어결과실행 시간메모리
1190655minggaCurtains (NOI23_curtains)C++20
100 / 100
647 ms89536 KiB
#include "bits/stdc++.h" using namespace std; #define ln "\n" #define pb push_back #define fi first #define se second #define all(x) (x).begin(), (x).end() #define sz(x) ((int)(x).size()) #define int long long const int mod = 1e9 + 7; const int inf = 2e18; const int N = 5e5 + 7; int n, m, k, ans[N]; struct segtree { int n; vector<int> st, lazy; segtree() {} segtree(int n): n(n) { st.resize(n * 4 + 4, 0); lazy.resize(n * 4 + 4, 0); } void down(int i) { if(lazy[i]) { int x = lazy[i]; lazy[i] = 0; st[i * 2] = max(st[i * 2], x); st[i * 2 + 1] = max(st[i * 2 + 1], x); lazy[i * 2] = max(lazy[i * 2], x); lazy[i * 2 + 1] = max(lazy[i * 2 + 1], x); } } void update(int i, int l, int r, int u, int v, int x) { if(l > v or r < u) return; if(u <= l and r <= v) { st[i] = max(st[i], x); lazy[i] = max(lazy[i], x); return; } down(i); int m = (l + r) >> 1; update(i * 2, l, m, u, v, x); update(i * 2 + 1, m + 1, r, u, v, x); st[i] = min(st[i * 2], st[i * 2 + 1]); } int get(int i, int l, int r, int u, int v) { if(l > v or r < u) return n + 1; if(u <= l and r <= v) { return st[i]; } down(i); int m = (l + r) >> 1; return min(get(i * 2, l, m, u, v), get(i * 2 + 1, m + 1, r, u, v)); } void update(int l, int r, int x) { update(1, 1, n, l, r, x); } int get(int l, int r) { return get(1, 1, n, l, r); } } st; vector<pair<int, int>> que[N]; vector<int> line[N]; signed main() { cin.tie(0) -> sync_with_stdio(0); #define task "" if(fopen(task ".INP", "r")) { freopen(task ".INP", "r", stdin); freopen(task ".OUT", "w", stdout); } cin >> n >> m >> k; for(int i = 1; i <= m; i++) { int l, r; cin >> l >> r; line[r].pb(l); } for(int i = 1; i <= k; i++) { int l, r; cin >> l >> r; que[r].pb({l, i}); } st = segtree(n); for(int i = 1; i <= n; i++) { for(int l : line[i]) { st.update(l, i, l); } // cerr << "TURN " << i << ln; // for(int j = 1; j <= n; j++) { // cerr << st.get(j, j) << ' '; // } // cerr << ln; for(auto x : que[i]) { int l = x.fi, id = x.se; ans[id] = (st.get(l, i) >= l); } } for(int i = 1; i <= k; i++) { cout << (ans[i] ? "YES" : "NO") << ln; } cerr << "\nTime: " << clock() * 1000 / CLOCKS_PER_SEC; }

컴파일 시 표준 에러 (stderr) 메시지

curtains.cpp: In function 'int main()':
curtains.cpp:71:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   71 |                 freopen(task ".INP", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
curtains.cpp:72:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   72 |                 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...