首页 > 其他分享 >P7910 [CSP-J 2021] 插入排序 题解

P7910 [CSP-J 2021] 插入排序 题解

时间:2024-10-23 12:31:51浏览次数:1  
标签:int 题解 插入排序 scanf 数组 排序 P7910

正解

首先要注意 $2$ 点:

  1. 修改数组元素的值 会影响 接下来的操作.
  2. 对数组进行排序 不会影响 接下来的操作.

思路

直接扫一遍数组.假设排序后 $a_x$ 会在第 $p$ 位上. 将 $p$ 初始化为 $n$.

然后就开始找 $x$ 前后有多少个小于 $a_x$ 的值就行了.

时间复杂度:$\Theta (nq)$.

注意事项

插入排序是 稳定 的一种排序算法

改成 $cin$ 会 TLE,所以使用 $scanf$ 或者快读.

代码

#include<iostream>
#include<cstdio>

using namespace std;

int n, q;
int a[8003];

int main() {
	scanf("%d%d", &n, &q);
	for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
	while (q--) {
		int op, x, v;
		scanf("%d", &op);
		if (op == 1) {
			scanf("%d%d", &x, &v);
			a[x] = v;
		}
		else {
			scanf("%d", &x);
			int p = n; // 初始化
			for (int i = 1; i < x; i++) // 前 x-1 个 
				if (a[i] > a[x]) p--;
			for (int i = x + 1; i <= n; i++) // 后面 x+1 ~ n 个
				if (a[i] >= a[x]) p--; // 稳定的排序算法,所以本来在x后面的还得在x后面
			printf("%d\n", p);
		}
	}
	return 0;
}

标签:int,题解,插入排序,scanf,数组,排序,P7910
From: https://www.cnblogs.com/panda-lyl/p/18496121

相关文章

  • P7911 [CSP-J 2021] 网络连接 题解
    模拟代码#include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;intn,p=1,ans[1003];//没事干的ans数组structnode{ stringop,ad;}a[1003];intws(intn){//位数 intsum=0; if(n==0)return1; while(n){ n......
  • P8816 [CSP-J 2022] 上升点列 题解
    最长上升子序列根据题目中,每个坐标的横纵坐标均单调递增,所以明显可以使用最长上升子序列.定义状态$f_{i,p}$,表示正在节点$i$时,还剩下$p$次插入机会,所能达到的最大长度.定义变量$dis=|x_i-x_j|+|y_i-y_j|-1.$,表示$i$到$j$节点至少要插$dis$个节点.为什么要$-1$......
  • ARC165F题解
    前言\(2024.10.19\)日校测\(T4\),思维太庙,被薄纱了,遂哭弱,写题解以记之。简要题意给你一个长度为\(2n\)的序列\(A,\foralla_i\in[1,n]\),其中\(1\)到\(n\)每个数都出现了两次,现在需要把相同的两个数排到一起,每次操作只能交换相邻两个数,在保证操作次数最小的情况下求出现......
  • P8814 [CSP-J 2022] 解密 题解
    解方程$题目中说,n=pq,ed=(p-1)(q-1)+1,m=n-ed+2.$$把ed的式子展开,得到:$$ed=p(q-1)-(q-1)+1$$ed=pq-p-q+2$$再把展开后的式子带入m中,得:$$m=n-(pq-p-q+2)+2.$$m=n-pq+p+q-2+2$$\becausen=pq$$\thereforem=pq-pq+p+q-2+2$$m=p+q.$$如果想要求出p和q的值,那么可以再......
  • P8815 [CSP-J 2022] 逻辑表达式 题解
    短路我们可以使用一个变量来记录当前有没有短路.设变量短路为$dl$.当$dl$为$0$时,说明当前值为$0$,且运算符为&.当$dl$为$1$时,说明当前值为$1$,且运算符为|.代码重点讲完了,细节可以看代码以及注释.#include<iostream>#include<cstdio>#include<cstring>using......
  • 排序(一)插入排序,希尔排序,选择排序,堆排序,冒泡排序
    目录一.排序1.插入排序2.希尔排序3.选择排序4.堆排序5.冒泡排序二.整体代码1.Sort.h2.Sort.c3.test.c一.排序1.插入排序插入排序基本思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序......
  • 最佳序列 题解
    最佳序列题解题目描述你得到了一个\(N\)个非负整数组成的序列\(A\)。我们称由序列\(A\)的连续若干项组成的新序列为\(A\)的一个连续子序列。给出两个正整数\(L,R(L\leR)\)。称\(A\)的每一个长度不小于\(L\)且不大于\(R\)的连续子序列为一个纯洁序列,定义纯洁度......
  • 题解 [NOIP2022] 建造军营
    树形\(dp\)好题。观察题目发现,如果B国袭击后,导致A国两个军营不联通,那么B国袭击的一定是一条割边,反之,如果袭击的不是割边,那么不会导致任何影响。所以先进行边双缩点,变成一棵树,记每个联通块(缩完后)内的点数为\(wa\),边数为\(wb\),不妨先考虑对于树的情况如何处理。将问题进行转......
  • 20241022 校测T1 链链链(chain)题解
    Problem链链链chain你有一个长度为\(n\)的链,编号为\(i(1≤i<n)\)的边连接着结点\(i\)与\(i+1\)。每个结点\(i\)上有一个整数\(a_i\)。你需要做以下操作\(n−1\)次:•选择一条还未被断开的边,设其连接了点\(i\)与\(i+1\),将其断开。•断边后,对于所......
  • P9751 [CSP-J 2023] 旅游巴士 题解
    思路首先,举一个例子,假如说小Z到了入口,但是没到时间,所以没法进去,该怎么办?当然是等$k$个时间单位呀.除此之外,像到了其他景区,但是还没开门怎么办?继续等$k$的非负整数倍时间呀.知道这个后,我们先定义状态$f_{i,j}$,表示到达点$i$时,路径长度(即时间)$mod$$k$的最早时......