2.
#include <cstdio>
int n,i,a[100010], pos;
long long ans;
int main() {
scanf("%d", &n);
for(i=1; i<=n; i++) scanf("%d",a+i) ;
pos=n;
ans=0;
for(i=n; i>=1; i--) {
if(a[i]>a[pos]) pos=i;
ans+=pos-i+1;
}
printf("%lld\n", ans);
return 0;
}
判断题
1) 如果输入的n是不超过100000的整数,输入的a[i]是不超过1000000000的整数(下同),那么输出的ans 一定不会小于n。()
2) 如果将第7行的“pos=n”改为“pos=1”,将第9行的“for(i=n;i>=1;i--)”改为“for(i=1;i<-n;i++)”,将第10行的“a[i]>a[pos]”改为“a[i]<a[pos]",将第11行的“pos-i+l”改为“i-pos+1",那么输出不会发生变化。( )
3) 如果输入的n为3,其他限制不变,那么输出的ans 可能且仅可能为3、4、5、6中的任意一个数。( )
选择题
4) 如果输入的n=6,输入的a[日]分别为3、6、2、5、4、1,那么输出的ans的值是( )。
5) 如果输入的n确定,那么输出的ans 可能的最大值是( )。
3.
#include <cstdio>
int n,i,j,flag=1,ans1, ans2, pos,a[1010], b[1010];
int main() {
scanf("%d",&n);
for(i=1; i<=n;i++) scanf("%d",&a[i]);
for(i=1; i<=n;i++) scanf("%d",&b[i]);
for(i=1; i<n; i++) if(a[i]>a[i+1]) flag=0;
for(i=1; i<n; i++) if(b[i]>b[i+1]) flag=0;
if(!flag) {
puts("invalid data");
return 0;
}
ans1=0;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if(a[i]>b[j])ans1++;
printf("%d\n", ans1);
ans2=0;
pos=0;
for(int i=1; i<=n; i++) {
while(pos<n&&b[pos+1]<a[i]) pos++;
ans2+=pos;
}
printf("%d\n", ans2);
return 0;
}
判断题
1) 如果输入的n是不超过1000的正整数,输入的a[i]、b[i]是不超过1000000000的正整数(下同),那么输出的ans1与ans2一定相等。()
2) 如果将第16行的“a[i]>b[j]”改为“a[i]<b[j]”,将第2行的“ans2+=pos”改为“ans2+=n-pos”输出的ans1 与ans2一定相等( )
选择题
3) 当输入的n是5,输入的a[i]分别为2、5、5、7、10,输入的b[i]分别为3、4、5、8、10时,输出的ans2为 ( )。
4) 第20到第23行的时间复杂度为( )。
5) 若输入的n确定,则输出的 ans2 可能的最大值为( )。