結果
| 問題 |
No.3094 Stapler
|
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2025-03-09 14:53:06 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
RE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,629 bytes |
| コンパイル時間 | 351 ms |
| コンパイル使用メモリ | 28,500 KB |
| 実行使用メモリ | 7,720 KB |
| 最終ジャッジ日時 | 2025-10-23 22:19:54 |
| 合計ジャッジ時間 | 6,214 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 62 RE * 10 |
コンパイルメッセージ
main.c: In function ‘main’:
main.c:9:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
9 | scanf("%d", &N);
| ^~~~~~~~~~~~~~~
main.c:10:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
10 | scanf("%d", &Q);
| ^~~~~~~~~~~~~~~
main.c:29:17: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
29 | scanf("%d", &t);
| ^~~~~~~~~~~~~~~
main.c:31:25: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
31 | scanf("%d %d", &l, &r);
| ^~~~~~~~~~~~~~~~~~~~~~
main.c:59:25: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
59 | scanf("%d", &q);
| ^~~~~~~~~~~~~~~
ソースコード
#include <stdio.h>
#define SIZE 250
#define NUM 400
int main()
{
int i, N, Q;
scanf("%d", &N);
scanf("%d", &Q);
int bn, bl[NUM], br[NUM];
for (bn = 0, i = 0; 1; i = br[bn++]) {
bl[bn] = i;
br[bn] = i + SIZE;
if (br[bn] >= N) {
br[bn] = N;
break;
}
}
br[++bn] = N + 1;
int h, k, ans = N, A[100001] = {}, block[NUM][2], t, L[100001], R[100001], l, r, q;
for (k = 0; k < bn; k++) {
block[k][0] = 0;
block[k][1] = br[k] - bl[k];
}
for (h = 1; h <= Q; h++) {
scanf("%d", &t);
if (t == 1) {
scanf("%d %d", &l, &r);
L[h] = l;
R[h] = r;
k = l / SIZE;
for (i = l; i < br[k] && i < r; i++) {
if (A[i] == 0) {
block[k][1]--;
if (block[k][0] == 0) ans--;
}
A[i]++;
}
if (i < r) {
for (k++; br[k] <= r; i = br[k++]) {
if (block[k][0] == 0) ans -= block[k][1];
block[k][0]++;
}
if (i < r) {
for (; i < r; i++) {
if (A[i] == 0) {
block[k][1]--;
if (block[k][0] == 0) ans--;
}
A[i]++;
}
}
}
} else if (t == 2) {
scanf("%d", &q);
l = L[q];
r = R[q];
k = l / SIZE;
for (i = l; i < br[k] && i < r; i++) {
A[i]--;
if (A[i] == 0) {
block[k][1]++;
if (block[k][0] == 0) ans++;
}
}
if (i < r) {
for (k++; br[k] <= r; i = br[k++]) {
block[k][0]--;
if (block[k][0] == 0) ans += block[k][1];
}
if (i < r) {
for (; i < r; i++) {
A[i]--;
if (A[i] == 0) {
block[k][1]++;
if (block[k][0] == 0) ans++;
}
}
}
}
} else {
printf("%d\n", ans);
}
}
fflush(stdout);
return 0;
}