求助时间复杂度
查看原帖
求助时间复杂度
311306
dk_qwq楼主2022/9/5 21:45
#include<iostream>
#include<cstdio>
#include<utility>
#define node pair<int,int>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
const int N=8e3+5;
node a[N];
int n,q;
void solve(int x,int v){
	for(int i=1;i<=n;i++)
		if(a[i].second==x){
			x=i,a[i].first=v;
			break;
		}
	while(a[x-1].first>a[x].first||(a[x-1].first==a[x].first&&a[x-1].second>a[x].second)){
		swap(a[x-1],a[x]),x--;
	}
	while(a[x+1].first<a[x].first||(a[x+1].first==a[x].first&&a[x+1].second<a[x].second)){
		swap(a[x+1],a[x]),x++;
	}
}
void print(){
	for(int i=1;i<=n;i++) printf("%d%c",a[i].first," \n"[i==n]);
	for(int i=1;i<=n;i++) printf("%d%c",a[i].second," \n"[i==n]);
}
int main() {
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++) scanf("%d",&a[i].first),a[i].second=i;
	sort(a+1,a+1+n);
	a[0].first=-inf;
	a[n+1].first=inf;
	while(q--){
//		print();
		int op,x,v;
		scanf("%d%d",&op,&x);
		if(op==1){
			scanf("%d",&v);
			solve(x,v);
		}
		if(op==2){
			for(int i=1;i<=n;i++)
				if(a[i].second==x){
					printf("%d\n",i);
					break;
				}
		}
	}
}

感觉时间复杂度是 O(nq) 的啊,为什么能过啊,是我算错了还是数据太水了

2022/9/5 21:45
加载中...