这是我写的100pts代码:
#include<bits/stdc++.h>
using namespace std;
int n,op,u,v,a[8005],b[8005];
int kd(){
int fh=1,z=0;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') fh=-1;
c=getchar();
}
while(c>='0'&&c<='9') z=z*10+c-'0',c=getchar();
return fh*z;
}
int main(){
int q;
n=kd(),q=kd();
for(int i=1;i<=n;i++) a[i]=kd();
while(q--){
int d=n;
op=kd();
if(op==1) u=kd(),v=kd(),a[u]=v;
else{
v=kd();
for(int i=1;i<v;i++) if(a[v]<a[i]) d--;
for(int i=v+1;i<=n;i++) if(a[v]<=a[i]) d--;
cout<<d<<'\n';
}
}
return 0;
}
而我同学 @ cwxcdzw1 写的76pts的T飞的代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,q,ans,op,x,v,a[8006];
int kd(){
int z=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
z=z*10+c-'0';
c=getchar();
}
return z*f;
}
int main(){
n=kd();
q=kd();
for(int i=1;i<=n;i++) a[i]=kd();
while(q--){
ans=n;
op=kd();
x=kd();
if(op==1){
v=kd();
a[x]=v;
}
else{
for(int i=1;i<x;i++) if(a[i]>a[x]) ans--;
for(int i=x+1;i<=n;i++) if(a[i]>=a[x]) ans--;
printf("%d\n",ans);
}
}
return 0;
}
请勿怀疑我俩抄代码
如上,我们发现,两份代码思路一致,但我们将 @ cwxcdzw1 的ans开在循环以内,就不会T了,这是为什么呢?求助,壶关两枚。