求助:本地只输出3,洛谷RE
查看原帖
求助:本地只输出3,洛谷RE
661595
a2lyaXNhbWUgbWFyaXNh楼主2022/9/25 19:44
#include<bits/stdc++.h>
using namespace std;

inline int read() {
	int x = 0, f = 1;
	char ch = getchar();
	while (ch < '0' || ch > '9') {
		if (ch == '-') {
			f = -1;
		}
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9') {
		x = (x << 1) + (x << 3) + (ch ^ 48);
		ch = getchar();
	}
	return x * f;
}

inline void write(int x) {
	if (x < 0)
		putchar('-'), x = -x;
	if (x > 9) {
		write(x / 10);
	}
	putchar(x % 10 + '0');
}



int ord[8010];
int n, q;
struct node {
	int val;
	int id;
} num[8010];
bool operator>(node a, node b) {
	return a.val != b.val ? a.val > b.val : a.id > b.id;
}
bool operator<(node a, node b) {
	return a.val != b.val ? a.val < b.val : a.id < b.id;
}
void updataord() {
	for (int i = 1; i <= n; i++)
		ord[num[i].val] = i;
}
void updatanode(int x, int v) {
	num[x].val = v;
	for (int i = ord[x]; i < n; i++) {
		if (num[i] > num[i + 1])
			swap(num[i], num[i + 1]);
	}
	for (int i = ord[x]; i > 1; i--) {
		if (num[i] < num[i - 1])
			swap(num[i], num[i - 1]);
	}
	updataord();
}
int main() {
	n = read();
	q = read();
	for (int i = 1; i <= n; i++) {
		num[i].val = read();
		num[i].id = i;
	}
	sort(num + 1, num + n + 1);
	updataord();
	for (int i = 1; i <= q; i++) {
		int opt;
		opt = read();
		if (opt == 1) {
			int x, v;
			x = read();
			v = read();
			updatanode(x, v);
		} else {
			int x;
			x = read();
			write(ord[x]);
			puts("");
		}
	}
	return 0;
}
2022/9/25 19:44
加载中...