第二题插入排序参考程序代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 8e3 + 7;
struct node{
int val, id;
bool operator < (const node& t)const{
if(val != t.val)
return val < t.val;
return id < t.id;
}
};
node a[N];
int ans[N]; //ans[i] 记录第 i 个数排完序后的位置
int main()
{
//freopen("sort.in","r",stdin);
// freopen("sort.out","w",stdout);
int n, q;
cin>>n>>q;
for(int i = 1; i <= n; i++)
{
int _val;
cin>>_val;
a[i] = {_val, i};
}
sort(a + 1, a + n + 1);
for(int i = 1; i <= n; i++) ans[a[i].id] = i;
while(q--)
{
int op;
cin>>op;
if(op == 1)
{
int x, v;
cin>>x>>v;
int pos = ans[x];
a[pos].val = v;
//从后往前
while(pos >= 2 && a[pos] < a[pos-1])
{
swap(ans[a[pos].id], ans[a[pos-1].id]);
swap(a[pos], a[pos-1]);
pos--;
}
//从前往后
while(pos < n && a[pos+1] < a[pos])
{
swap(ans[a[pos+1].id], ans[a[pos].id]);
swap(a[pos], a[pos+1]);
pos++;
}
}
else
{
int x;
cin>>x;
cout<<ans[x]<<endl;
}
}
return 0;
}