This commit is contained in:
unlockable
2023-11-29 20:55:51 +08:00
parent 5cbb675860
commit 8498520398

View File

@@ -10,25 +10,25 @@ struct TreeNode {
TreeNode tree[TREE_SIZE] = {0};
int vals[TREE_SIZE] = {0};
int num_in_tree[TREE_SIZE] = {0};
int num_in_tree_head = 0, num_in_tree_tail = 0;
// unsigned short num_in_tree[TREE_SIZE] = {0};
// int num_in_tree_head = 0, num_in_tree_tail = 0;
int tree_root = NOTHING;
// int new_tree_node = 0;
int M, K, H;
long long total = 0;
int l = 0;
int enqueue(int num) {
num_in_tree[num_in_tree_tail] = num;
num_in_tree_tail = (num_in_tree_tail + 1) % TREE_SIZE;
return 0;
}
// int enqueue(int num) {
// num_in_tree[num_in_tree_tail] = num;
// num_in_tree_tail = (num_in_tree_tail + 1) % TREE_SIZE;
// return 0;
// }
int dequeue() {
int ans = num_in_tree[num_in_tree_head];
num_in_tree_head = (num_in_tree_head + 1) % TREE_SIZE;
return ans;
}
// int dequeue() {
// int ans = num_in_tree[num_in_tree_head];
// num_in_tree_head = (num_in_tree_head + 1) % TREE_SIZE;
// return ans;
// }
int insert_node(int num, int pos) {
if (pos == NOTHING) {
@@ -37,7 +37,7 @@ int insert_node(int num, int pos) {
tree_root = l % K;
vals[l % K] = num;
// new_tree_node = (new_tree_node + 1) % TREE_SIZE;
return 0;
return l % K;
}
tree[pos].size++;
if (vals[pos] > num) {
@@ -46,11 +46,11 @@ int insert_node(int num, int pos) {
tree[l % K] = TreeNode{1, NOTHING, NOTHING};
vals[l % K] = num;
// new_tree_node = (new_tree_node + 1) % TREE_SIZE;
return 0;
return l % K;
}
else {
insert_node(num, tree[pos].left);
return 0;
return insert_node(num, tree[pos].left);
// return 0;
}
}
else {
@@ -59,11 +59,11 @@ int insert_node(int num, int pos) {
tree[l % K] = TreeNode{1, NOTHING, NOTHING};
vals[l % K] = num;
// new_tree_node = (new_tree_node + 1) % TREE_SIZE;
return 0;
return l % K;
}
else {
insert_node(num, tree[pos].right);
return 0;
return insert_node(num, tree[pos].right);
// return 0;
}
}
}
@@ -186,11 +186,11 @@ int main() {
total += count_less_than(((long long)num) + H, tree_root) - count_less_than(num - H - 1, tree_root);
if (l >= K) {
tree_root = delete_node(dequeue(), tree_root);
tree_root = delete_node(vals[l % K], tree_root);
// traverse(tree_root);
// printf("\n");
}
enqueue(num);
// enqueue(num);
insert_node(num, tree_root);
// traverse(tree_root);
// printf("\n");