제출 #495124

#제출 시각아이디문제언어결과실행 시간메모리
495124ZielGift (IZhO18_nicegift)C++17
18 / 100
2080 ms205408 KiB
/** * LES GREATEABLES BRO TEAM **/ #include <bits/stdc++.h> using namespace std; using ll = long long; #define sz(x) (int)x.size() const bool FLAG = false; void setIO(const string &f = ""); #define int ll const int N = 2e6 + 4; ll n, k, a[N]; struct node { int mx, pos, mx2, pos2; } t[4 * N]; node merge(node x, node y) { if (x.mx > y.mx) { if (x.mx2 > y.mx) return x; else return {x.mx, x.pos, y.mx, y.pos}; } if (y.mx2 > x.mx) return y; return {y.mx, y.pos, x.mx, x.pos}; } void build(int x = 0, int lx = 1, int rx = n + 1) { if (rx - lx == 1) { t[x].mx = a[lx]; t[x].pos = lx; t[x].mx2 = -1; t[x].pos2 = -1; } else { int mid = (lx + rx) / 2; build(2 * x + 1, lx, mid); build(2 * x + 2, mid, rx); t[x] = merge(t[2 * x + 1], t[2 * x + 2]); } } node get(int l, int r, int x = 0, int lx = 1, int rx = n + 1) { if (rx <= l || r <= lx) return {-1, -1, -1, -1}; if (l <= lx && rx <= r) return t[x]; int mid = (lx + rx) / 2; node s1 = get(l, r, 2 * x + 1, lx, mid); node s2 = get(l, r, 2 * x + 2, mid, rx); return merge(s1, s2); } void upd(int i, int v, int x = 0, int lx = 1, int rx = n + 1) { if (rx - lx == 1) { t[x].mx += v; t[x].mx2 = -1; t[x].pos = lx; t[x].pos2 = -1; } else { int mid = (lx + rx) / 2; if (i < mid) upd(i, v, 2 * x + 1, lx, mid); else upd(i, v, 2 * x + 2, mid, rx); t[x] = merge(t[2 * x + 1], t[2 * x + 2]); } } void solve() { cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> a[i]; } build(); vector<pair<int, int>> v; while (true) { node cur = get(1, n + 1); if (cur.mx == 0 && cur.mx2 == 0) { cout << sz(v) << '\n'; for (int i = 0; i < sz(v); i++) cout << "1 " << v[i].first << ' ' << v[i].second << '\n'; return; } else if (cur.mx == 1 && cur.mx2 == 0) { cout << -1; return; } v.push_back({cur.pos, cur.pos2}); upd(cur.pos, -1); if (cur.pos2 == -1) { cout << -1; return; } upd(cur.pos2, -1); } } signed main() { setIO(); int tt = 1; if (FLAG) { cin >> tt; } while (tt--) { solve(); } return 0; } void setIO(const string &f) { ios_base::sync_with_stdio(false); cin.tie(nullptr); if (fopen((f + ".in").c_str(), "r")) { freopen((f + ".in").c_str(), "r", stdin); freopen((f + ".out").c_str(), "w", stdout); } }

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

nicegift.cpp: In function 'void setIO(const string&)':
nicegift.cpp:118:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  118 |         freopen((f + ".in").c_str(), "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nicegift.cpp:119:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  119 |         freopen((f + ".out").c_str(), "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...