提交记录 4804


用户 题目 状态 得分 用时 内存 语言 代码长度
wys noi17a. 【NOI2017】整数 Time Limit Exceeded 80 2 s 4052 KB C++ 2.40 KB
提交时间 评测时间
2018-08-03 09:48:19 2020-07-31 23:13:28
// integer naive_new.cpp[nm/1024] by wys @2017-06-27

#include <stdio.h>
#include <stdint.h>

const int MAXN = 1000005;
const int MAXM = MAXN * 30 + 100;
const int MAXLEN = MAXM / 32 + 1;
const int MAXLEN2 = MAXLEN / 32 + 1;

uint32_t A[MAXLEN];
uint32_t is_0[MAXLEN2];
uint32_t is_1[MAXLEN2];

void get(int pos) {
	if (is_0[pos >> 5] & (1u << (pos & 31))) {
		A[pos] = 0;
	}
	if (is_1[pos >> 5] & (1u << (pos & 31))) {
		A[pos] = -1;
	}
}

void update(int pos) {
	uint32_t tmp = A[pos];
	if (tmp == 0) {
		is_0[pos >> 5] |= 1u << (pos & 31);
	} else {
		is_0[pos >> 5] &= ~(1u << (pos & 31));
	}
	if (tmp == -1) {
		is_1[pos >> 5] |= 1u << (pos & 31);
	} else {
		is_1[pos >> 5] &= ~(1u << (pos & 31));
	}
}

void _add1(int p) {
	for (; p & 31; p++) {
		get(p), ++A[p], update(p);
		if (A[p] != 0) return;
	}
	
	int q = p >> 5;
	while (is_1[q] == -1) {
		is_0[q] = -1;
		is_1[q] = 0;
		++q;
	}
	
	p = q << 5;
	
	for (; ; p++) {
		get(p), ++A[p], update(p);
		if (A[p] != 0) return;
	}
}

void _sub1(int p) {
	for (; p & 31; p++) {
		get(p), --A[p], update(p);
		if (A[p] != -1) return;
	}
	
	int q = p >> 5;
	while (is_0[q] == -1) {
		is_1[q] = -1;
		is_0[q] = 0;
		++q;
	}
	
	p = q << 5;
	
	for (; ; p++) {
		get(p), --A[p], update(p);
		if (A[p] != -1) return;
	}
}

void _add(int pos, uint32_t val) {
	get(pos);
	if ((A[pos] += val) < val) {
		_add1(pos + 1);
	}
	update(pos);
}

void _sub(int pos, uint32_t val) {
	get(pos);
	if (A[pos] < val) {
		_sub1(pos + 1);
	}
	A[pos] -= val;
	update(pos);
}

void add(int _a, int b) {
	if (_a == 0) return;
	
	bool neg = _a < 0;
	uint32_t a = neg ? -_a : _a;
	
	// b/32, b%32, 32-b%32, b/32+1, 0, b%32
	
	int pos = b >> 5;
	int off = b & 31;
	int len1 = 32 - off;
	
	// log(1e9) = 30
	uint32_t part1 = len1 >= 30 ? a : (a & ((1u << len1) - 1));
	uint32_t part2 = len1 >= 30 ? 0 : (a >> len1);
	
	if (part1) (neg ? _sub : _add)(pos, part1 << off);
	if (part2) (neg ? _sub : _add)(pos + 1, part2);
}

int query(int k) {
	return get(k >> 5), ((A[k >> 5]) >> (k & 31)) & 1u;
}

int main() {
	#ifndef WYS
	freopen("integer.in", "r", stdin);
	freopen("integer.out", "w", stdout);
	#endif
	
	int n, t1, t2, t3;
	scanf("%d%d%d%d", &n, &t1, &t2, &t3);
	
	for (int i = 0; i < MAXLEN2; i++) {
		is_0[i] = -1;
	}
	
	for (int i = 0; i < n; i++) {
		int op, a, b, k;
		scanf("%d", &op);
		if (op == 1) {
			scanf("%d%d", &a, &b);
			add(a, b);
		} else {
			scanf("%d", &k);
			putchar("01"[query(k)]);
			putchar('\n');
		}
	}
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #125.57 us140 KBAcceptedScore: 4

Testcase #239.06 us140 KBAcceptedScore: 4

Testcase #3271.35 us140 KBAcceptedScore: 4

Testcase #4415.56 us140 KBAcceptedScore: 4

Testcase #5995.25 us140 KBAcceptedScore: 4

Testcase #61.065 ms144 KBAcceptedScore: 4

Testcase #72.27 ms176 KBAcceptedScore: 4

Testcase #81.681 ms144 KBAcceptedScore: 4

Testcase #912.556 ms268 KBAcceptedScore: 4

Testcase #1031.291 ms352 KBAcceptedScore: 4

Testcase #1111.782 ms184 KBAcceptedScore: 4

Testcase #1222.48 ms420 KBAcceptedScore: 4

Testcase #1345.237 ms444 KBAcceptedScore: 4

Testcase #14407.877 ms1008 KBAcceptedScore: 4

Testcase #15461.39 ms1 MB + 424 KBAcceptedScore: 4

Testcase #161.57 s1 MB + 860 KBAcceptedScore: 4

Testcase #17157.899 ms496 KBAcceptedScore: 4

Testcase #182 s2 MB + 500 KBTime Limit ExceededScore: 0

Testcase #192 s2 MB + 880 KBTime Limit ExceededScore: 0

Testcase #2090.883 ms3 MB + 868 KBAcceptedScore: 4

Testcase #212 s3 MB + 668 KBTime Limit ExceededScore: 0

Testcase #22381.296 ms808 KBAcceptedScore: 4

Testcase #232 s956 KBTime Limit ExceededScore: 0

Testcase #24394.517 ms852 KBAcceptedScore: 4

Testcase #252 s3 MB + 980 KBTime Limit ExceededScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-04-12 22:40:45 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠