记录编号 |
574376 |
评测结果 |
AAAAAAAAAAAAAAAAAAAAAAAAA |
题目名称 |
[CSP 2021J]插入排序 |
最终得分 |
100 |
用户昵称 |
Lesater |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
5.998 s |
提交时间 |
2022-08-05 16:13:27 |
内存使用 |
3.79 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct Node{
int w;
int nub;
int to;
};
Node a[8001];
Node b[8001];
long long n,q;
bool cmp(Node a,Node b)
{
if(a.w<b.w||(a.w==b.w&&a.nub<b.nub)) return true;
return false;
}
int main()
{
freopen("csp2021pj_sort.in","r",stdin);
freopen("csp2021pj_sort.out","w",stdout);
cin>>n>>q;
for(int i=1;i<=n;++i)
{
cin>>a[i].w;
b[i].w=a[i].w;
b[i].nub=i;
}
sort(b+1,b+1+n,cmp);
for(int i=1;i<=n;++i)
a[b[i].nub].to=i;
int k,x,y;
while(q>0)
{
q--;
cin>>k;
if(k==1)
{
cin>>x>>y;
a[x].w=y;
int t=a[x].to;
b[t].w=y;
for(int i=t;i<n;++i)
{
if(b[i].w>b[i+1].w||
(b[i].w==b[i+1].w&&b[i].nub>b[i+1].nub))
{
a[x].to=i+1;
a[b[i+1].nub].to=i;
Node l=b[i];
b[i]=b[i+1];
b[i+1]=l;
}
}
for(int i=t;i>1;--i)
{
if(b[i].w<b[i-1].w||
(b[i].w==b[i-1].w&&b[i].nub<b[i-1].nub))
{
a[x].to=i-1;
a[b[i-1].nub].to=i;
Node l=b[i];
b[i]=b[i-1];
b[i-1]=l;
}
}
}
if(k==2)
{
cin>>x;
cout<<a[x].to<<endl;
}
}
return 0;
}