1066 图像过滤,AC时为什么提示超时?

 //1066 图像过滤V1
#include <iostream> 
using namespace std;

int main(){
    long int M,N,A,B,replace,tmp,i; cin>>M>>N>>A>>B>>replace;
    for(i=0;i<N*M;i++){
        cin>>tmp;
        if(tmp>=A&&tmp<=B)  tmp=replace;
        printf("%03d%c",tmp,(i+1)%N==0?'\n':' ');
    }
    return 0;
}

这么短的程序时间复杂度只是N*M呀

cin有缓存,效率比scanf低很多,也可以用cin.sync_with_stdio(false);,但是就不能和c的混用

 #include <iostream>
using namespace std;

int main() {
    int M, N, A, B, replace, tmp, i;
    cin >> M >> N >> A >> B >> replace;
    for (i = 0; i < N*M; i++) {
        scanf("%d", &tmp);
        if (tmp >= A && tmp <= B)  
            tmp = replace;
        printf("%03d%c", tmp, (i + 1) % N == 0 ? '\n' : ' ');
    }
    return 0;
}
 #include <iostream>
using namespace std;

int main() {
    int M, N, A, B, replace, tmp, i;
    cin >> M >> N >> A >> B >> replace;
    cin.sync_with_stdio(false);
    for (i = 0; i < N*M; i++) {
        cin >> tmp;
        if (tmp >= A && tmp <= B)  
            tmp = replace;
        printf("%03d%c", tmp, (i + 1) % N == 0 ? '\n' : ' ');
    }
    return 0;
}

但是用c就可以通过

 #include <stdio.h> 
int main() { 
  int N, M, A, B, C, D; 
  scanf("%d %d %d %d %d", &M, &N, &A, &B, &C); 
  for(int i = 0; i < M; i++) { 
    for(int j = 0; j < N; j++) { 
      scanf("%d", &D); 
      if(A <= D && D <= B) D = C; 
      printf("%03d%c", D, j == N - 1 ? '\n' : ' ');
      } 
  } 
  return 0; 
}