Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33506 wangjiajian [CSP-J2021]插入排序 C++ 通过 100 82 MS 280 KB 1433 2021-12-06 18:27:26

Tests(25/25):


#include <cstdio> #include <algorithm> using namespace std; int n, q, s; int index[100005]; struct node { int a, id; bool operator <(const node &n)const { return a<n.a || (a==n.a && id<n.id); } } arr[100005]; int main() { // freopen("sort.in","r",stdin); // freopen("sort.out","w",stdout); scanf("%d%d", &n, &q); for(int i=1; i<=n; i++) { arr[i].id = i; scanf("%d", &arr[i].a); } sort(arr+1, arr+n+1); for(int i=1; i<=n; i++) { index[arr[i].id] = i; } while(q--) { int op, x, y; scanf("%d%d", &op, &x); if(op == 1) { scanf("%d", &y); s = index[x]; arr[index[x]].a = y; for(int i=s-1; i>=1; i--) { if(arr[i].a>y || (arr[i].a==y && x<arr[i].id)) { swap(index[x], index[arr[i].id]); swap(arr[s], arr[i]); s = index[x]; } else break; } for(int i=s+1; i<=n; ++i) { if(arr[i].a<y || (arr[i].a==y && x>arr[i].id)) { swap(index[x], index[arr[i].id]); swap(arr[s], arr[i]); s = index[x]; } else break; } } else printf("%d\n", index[x]); } return 0; }


测评信息: