C++ 代码注释:堆数据结构的应用
#include
static const auto io_sync_off = { // 定义一个静态变量io_sync_off,并初始化为一个lambda函数 std::ios::sync_with_stdio(false); // 禁用输入输出流的同步 std::cin.tie(nullptr); // 解除cin与cout的绑定 return nullptr; // 返回空指针 }();
vector
void siftup(int k) // 定义一个函数siftup,参数为整型变量k { int j = k, i = (j - 1) / 2; // 声明整型变量j和i,并初始化为k和(k-1)/2 int t = nums[j]; // 声明整型变量t,并初始化为nums[j] while (j > 0) // 当j大于0时循环执行以下操作 { if (nums[i] < t) // 如果nums[i]小于t,则跳出循环 break; else // 否则执行以下操作 { nums[j] = nums[i]; // 将nums[i]赋值给nums[j] j = i; // 将i赋值给j i = (i - 1) / 2; // 更新i为(i-1)/2 } } nums[j] = t; // 将t赋值给nums[j] }
int main() // 主函数 { int n, m; // 声明整型变量n和m cin >> n >> m; // 输入n和m的值 nums.resize(n); // 调整nums的大小为n for (int i = 0; i < n; ++i) // 循环执行n次 { cin >> nums[i]; // 输入nums[i]的值 siftup(i); // 调用siftup函数,参数为i } string str; // 声明字符串变量str unordered_map<int, int> hash; // 声明一个无序映射hash,键为整型,值为整型 for (int i = 0; i < n; ++i) // 循环执行n次 hash[nums[i]] = i; // 将nums[i]作为键,i作为值存入hash中 for (int i = 0; i < m; ++i) // 循环执行m次 { int x, y, index_x, index_y; // 声明整型变量x、y、index_x和index_y cin >> x; // 输入x的值 cin >> str; // 输入字符串str的值 index_x = hash[x]; // 将hash[x]的值赋给index_x if (str[0] == 'a') // 如果str的第一个字符是'a',则执行以下操作 { cin >> y; // 输入y的值 getline(cin, str); // 读取一行输入并赋给str index_y = hash[y]; // 将hash[y]的值赋给index_y if ((index_x - 1) / 2 == (index_y - 1) / 2) // 如果(index_x-1)/2等于(index_y-1)/2,则输出'T' cout << 'T' << endl; else // 否则输出'F' cout << 'F' << endl; } else // 否则执行以下操作 { cin >> str; // 输入字符串str的值 cin >> str; // 输入字符串str的值 if (str[0] == 'r') // 如果str的第一个字符是'r',则执行以下操作 { if (index_x == 0) // 如果index_x等于0,则输出'T' cout << 'T' << endl; else // 否则输出'F' cout << 'F' << endl; } else if (str[0] == 'p') // 如果str的第一个字符是'p',则执行以下操作 { cin >> str; // 输入字符串str的值 cin >> y; // 输入y的值 index_y = hash[y]; // 将hash[y]的值赋给index_y if ((index_y - 1) / 2 == index_x) // 如果(index_y-1)/2等于index_x,则输出'T' cout << 'T' << endl; else // 否则输出'F' cout << 'F' << endl; } else // 否则执行以下操作 { cin >> str; // 输入字符串str的值 cin >> y; // 输入y的值 index_y = hash[y]; // 将hash[y]的值赋给index_y if ((index_x - 1) / 2 == index_y) // 如果(index_x-1)/2等于index_y,则输出'T' cout << 'T' << endl; else // 否则输出'F' cout << 'F' << endl; } } } return 0; // 返回0,表示程序正常结束
原文地址: https://www.cveoy.top/t/topic/qjbu 著作权归作者所有。请勿转载和采集!