一个神奇的问题
查看原帖
一个神奇的问题
648705
Glax712124楼主2023/8/25 23:17

由于被难题搞怕了

今天心血来潮找了个古董题“插入排序”做了做。

结果T飞了。

这CSP就要来了,搞得我很慌啊。

Code附上:

#include<bits/stdc++.h>
int n,q,a[8005];
int main(){
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	while(q--){
		int flag=0;
		scanf("%d",&flag);
		if(flag==1){
			int x,v=0;
			scanf("%d%d",&x,&v);
			a[x]=v;
			continue;
		}
		if(flag==2){
			int x,y,ans=0;
			scanf("%d",&x);
			for(int i=1;i<=n;i++){
				if(i<=x&&a[i]<=a[x]){
					ans++;
					continue;
				}
				if(i>x&&a[i]<a[x]){
					ans++;
					continue;
				}
			}
			printf("%d\n",ans);
			continue;
		}
	}
	return 0;
}

看题解、看讨论区,好像正解是线段树?并归?那换个写法吧。

在这之前,我看了下教练、巨佬同学们的代码:

#include<bits/stdc++.h>
using namespace std;
int s[20001];
int n,q,p;
int insert(int x){
	int ans=1;
	for(int i=1;i<x;i++)
		if(s[i]<=s[x])ans++;
	for(int i=x+1;i<=n;i++)
		if(s[i]<s[x])ans++;
	return ans;
}
int main(){
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++)
	scanf("%d",&s[i]);
	for(int i=1;i<=q;i++){
		scanf("%d",&p);
		if(p==1){
			int x,u;
			scanf("%d%d",&x,&u);
			s[x]=u;
		}
		else{
			int x;
			scanf("%d",&x);
			printf("%d\n",insert(x));
		}
	}
} 

???为什么A了???

这不就比我多写了一个函数???

那我还换什么写法???

所以求助万能的谷民,这两种代码有什么区别?

2023/8/25 23:17
加载中...