- 博客(8)
- 收藏
- 关注
原创 算法:最长上升序列
给定一个长度为 NN 的数列,求数值严格单调递增的子序列的长度最长是多少。 输入格式 第一行包含整数 NN。 第二行包含 NN 个整数,表示完整序列。 输出格式 输出一个整数,表示最大长度。 数据范围 1≤N≤1000, −109≤数列中的数≤109 输入样例: 7 3 1 2 1 8 5 6 输出样例: 4 运行代码: #include<iostream> #include<stdio.h> using namespace std; ...
2022-03-17 19:02:17
484
原创 算法:数字三角形
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 输入格式 第一行包含整数 n,表示数字三角形的层数。 接下来 n行,每行包含若干整数,其中第 i行表示数字三角形第 i层包含的整数。 输出格式 输出一个整数,表示最大的路径数字和。 数据..
2022-03-17 07:47:27
574
原创 算法:二维前缀和
题目描述 输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。 对于每个询问输出子矩阵中所有数的和。 输入 第一行包含三个整数 n,m,q。 接下来 n 行,每行包含 m 个整数,表示整数矩阵。 接下来 q 行,每行包含四个整数 x1,y1,x2,y2,表示一组询问。 输入较多,建议用scanf和printf 1≤n,m≤1000 1≤q≤200000 1≤ x1≤ x2≤ n 1≤ y1≤ y2≤...
2022-03-16 11:36:21
140
原创 算法:前缀和
题目 输入一个长度为n的整数序列。 接下来再输入m个询问,每个询问输入一对l,r。 对于每个询问,输出原序列中从第l个数到第r个数的和。 输入格式 第一行包含两个整数n和m。 第二行包含n个整数,表示整数数列。 接下来m行,每行包含两个整数l和r,表示一个询问的区间范围。 输出格式 共m行,每行输出一个询问的结果。 数据范围 1≤l≤r≤n, 1≤n,m≤100000, −1000≤数列中元素的值≤1000 输入样例: 5 3 2 1 ...
2022-03-16 10:32:02
131
原创 整数二分算法
题目: 给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。 对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 00 开始计数)。 如果数组中不存在该元素,则返回 -1 -1。 输入格式 第一行包含整数 n 和 q,表示数组长度和询问个数。 第二行包含 n 个整数(均在 1∼10000 范围内),表示完整数组。 接下来 q 行,每行包含一个整数 k,表示一个询问元素。 输出格式 共 q 行,每行包含两个整数,表示所求元素的起始位置和终止位置。 如果数组中不存在..
2022-01-25 16:37:02
158
原创 归并排序 C++
题目 : 给定你一个长度为 n 的整数数列。 请你使用归并排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行,第一行包含整数 n 。 第二行包含 n个整数(所有整数均在 1∼10的九次方范围内),表示整个数列。 输出格式 输出共一行,包含 n 个整数,表示排好序的数列。 数据范围 1≤n≤100000 输入样例: 5 3 1 2 4 5 输出样例: 1 2 3 4 5 思路: ①确定分界点:mid=(l+r)/2; ②递..
2022-01-24 12:21:20
257
原创 第k个数 C++
给定一个长度为n的整数数列,以及一个整数k,请用快速选择算法求出数列从小到大排序后的第k个数。 输入格式 第一行包含两个整数n和k。 第二行包含n个整数(所有整数均在1∼109范围内),表示整数数列。 输出格式 输出一个整数,表示数列的第k小数。 数据范围 1≤n≤100000, 1≤k≤n 输入样例: 53 24153 输出样例: 3 #include <iostream> using namespace std; const int N=1...
2022-01-22 20:57:23
462
原创 快速排序 C++
#include <iostream> #include <stdio.h> using namespace std; //快速排序; void quick_sort(int q[],int l,int r) { if(l>=r)return;//当左边界大于右边界结束递归; int i=l-1,j=r+1,x=q[(l+r)/2];//x为中间边界 while(i<j) { while (q[++i] < x); ...
2022-01-22 18:27:12
284
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅