結果
| 問題 |
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;
}