結果
問題 |
No.568 じゃんじゃん 落とす 委員会
|
ユーザー |
|
提出日時 | 2025-08-29 12:12:24 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,001 bytes |
コンパイル時間 | 1,803 ms |
コンパイル使用メモリ | 198,496 KB |
実行使用メモリ | 13,712 KB |
最終ジャッジ日時 | 2025-08-29 12:12:29 |
合計ジャッジ時間 | 4,403 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 25 WA * 1 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:37:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 37 | scanf("%lld%lld", &n, &m); | ~~~~~^~~~~~~~~~~~~~~~~~~~ main.cpp:40:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 40 | scanf("%lld%lld%lld", &x[i], &a[i], &b[i]); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 100010, M = 200000, A = 100001; int n, m, x[N], a[N], b[N], t1[M + 5], t2[M + 5]; vector<int> idx[N + 5]; int lowbit(int x) { return x & -x; } void add(int b[], int x, int y) { for (int i = x; i <= 200000; i += lowbit(i)) { b[i] += y; } } int sum(int b[], int x) { int res = 0; for (int i = x; i; i -= lowbit(i)) { res += b[i]; } return res; } signed main() { //freopen("difficulty.in", "r", stdin); //freopen("difficulty.out", "w", stdout); scanf("%lld%lld", &n, &m); for (int i = 1; i <= n; i ++ ) { scanf("%lld%lld%lld", &x[i], &a[i], &b[i]); a[i] ++ ; b[i] ++ ; idx[a[i]].push_back(i); } int cnt = 0; for (int i = 1; i <= n; i ++ ) { if (x[i] == 3) { cnt ++ ; } else if (x[i] == 2) { add(t2, b[i], 1); } else if (x[i] == 1) { add(t1, b[i], 1); } } int ans = 1e9; for (int i = 100001; i >= 0; i -- ) { for (int w : idx[i]) { if (x[w] == 2) { cnt ++ ; add(t2, b[w], -1); } else if (x[w] == 1) { add(t1, b[w], -1); add(t2, b[w], 1); } else if (x[w] == 0) { add(t1, b[w], 1); } } int l = 0, r = M; while (l < r) { int mid = l + r + 1 >> 1, tmp = cnt + sum(t2, M) + sum(t1, M) - sum(t1, mid - 1); if (tmp >= m) { l = mid; } else { r = mid - 1; } } if (l == 0) continue; int tmp = cnt + sum(t2, M) - sum(t2, l - 1); ans = min(ans, tmp); } printf("%lld\n", ans); return 0; }