社区讨论
不懂就问+进食后人
P7910[CSP-J 2021] 插入排序参与者 10已保存回复 23
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 23 条
- 当前快照
- 1 份
- 快照标识符
- @m1hrzgf1
- 此快照首次捕获于
- 2024/09/25 19:22 去年
- 此快照最后确认于
- 2025/11/05 01:50 4 个月前
这是我写的100pts代码:
C#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飞的代码如下:
C#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了,这是为什么呢?求助,壶关两枚。
回复
共 23 条回复,欢迎继续交流。
正在加载回复...