比赛 |
20220531高一小测验 |
评测结果 |
AAAAAAAAAAAAATTTTTTTTTTTT |
题目名称 |
插入排序 |
最终得分 |
52 |
用户昵称 |
dew52 |
运行时间 |
12.298 s |
代码语言 |
C++ |
内存使用 |
3.75 MiB |
提交时间 |
2022-06-01 21:22:40 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 8000 + 5;
struct Node
{
int num;
int id;
}b[MAXN], a[MAXN];//保存下标和数值
int n, q;//数组长度 操作次数
int pos;//插入的位置
void Sort();
int Find(Node x);
bool cmp(Node x, Node y);
int main()
{
freopen("csp2021pj_sort.in","r",stdin);
freopen("csp2021pj_sort.out","w",stdout);
scanf("%d%d", &n, &q);
for (int i = 1; i <= n; ++i)
{
scanf("%d", &a[i].num);
b[i].num = a[i].num;
b[i].id = a[i].id = i;
}
while (q--)
{
int opt = 0; scanf("%d", &opt);
if (opt == 1)
{
pos = 0; scanf("%d", &pos);
int value = 0; scanf("%d", &value);
a[pos].num = value;
b[pos].num = value;
}
else if (opt == 2)
{
pos = 0; scanf("%d", &pos);//3
Node tmp;
tmp.num = a[pos].num;//1
tmp.id = a[pos].id;//3
Sort();
printf("%d\n", Find(tmp));//找到原来下标为x的数现在的位置
}
// for (int i = 1; i <= n; ++i)
// {
// cout << b[i].num << "de xiabiao:" << b[i].id << endl;
// }
// puts("");
for (int i = 1; i <= n; ++i)
{
b[i].num = a[i].num;
b[i].id = i;
}
}
return 0;
}
void Sort()
{
sort(b + 1, b + n + 1, cmp);
// for (int i = 1; i <= n; ++i)
// {
// for (int j = i; j >= 2; --j)
// {
// if (b[j].num < b[j - 1].num)
// {
// int t1 = b[j - 1].num;
// int t2 = b[j - 1].id;
// b[j - 1].num = b[j].num;
// b[j - 1].id = b[j].id;
// b[j].num = t1;
// b[j].id = t2;
// }
// }
// }
}
int Find(Node x)
{
for (int i = 1; i <= n; ++i)
{
if (x.num == b[i].num && x.id == b[i].id)
{
return i;
}
}
}
bool cmp(Node x, Node y)
{
if (x.num != y.num)
{
return x.num < y.num;
}
else
{
return x.id < y.id;
}
}