比赛 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;
    }
}