由于被难题搞怕了
今天心血来潮找了个古董题“插入排序”做了做。
这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了???
这不就比我多写了一个函数???
那我还换什么写法???
所以求助万能的谷民,这两种代码有什么区别?