結果

問題 No.3094 Stapler
ユーザー 👑 ygussany
提出日時 2025-03-09 14:53:06
言語 C
(gcc 13.3.0)
結果
RE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,629 bytes
コンパイル時間 361 ms
コンパイル使用メモリ 28,032 KB
実行使用メモリ 7,848 KB
最終ジャッジ日時 2025-04-04 10:37:49
合計ジャッジ時間 6,141 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 61 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);
      |                         ^~~~~~~~~~~~~~~

ソースコード

diff #

#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;
}
0