Scusate mi spiegate l'inefficenza del primo programma rispetto al secondo?

codice:
# include <iostream>
# include <fstream>
using namespace std;

int main(int narg, char * * args, char * * env)
 {int *unidim = new int[1000000], **bidim = new int * [1000], i;
  for(i=0; i < 1000; i++) bidim[i] = new int[1000];
  if(narg < 2) return 1;
  ifstream uno(args[1]);
  if(!uno) return 2;
  uno . read((char *)unidim, 1000000 * sizeof(int)),
  uno . seekg(0, ios :: beg);
  for(i=0; i < 1000; i++)
   uno . read((char *)bidim[i], 1000 * sizeof(int));
  uno . close();
  cout << bidim[2][200] << ' ' << unidim[2200] << endl;
  // si osservi che 2200 = 2 * 1000 + 200
  }
codice:
# include <iostream>
# include <fstream>
using namespace std;

int main(int narg, char * * args, char * * env)
 {int *unidim = new int[1000000], **bidim = new int * [1000], i;
  //for(i=0; i < 1000; i++) bidim[i] = new int[1000];
  if(narg < 2) return 1;
  ifstream uno(args[1]);
  if(!uno) return 2;
  uno . read((char *)unidim, 1000000 * sizeof(int));
  //uno . seekg(0, ios :: beg);
  for(i=0; i < 1000; i++)
   //uno . read((char *)bidim[i], 1000 * sizeof(int));
   bidim[i] = unidim + i*1000;
  uno . close();
  cout << bidim[2][200] << ' ' << unidim[2200] << endl;
  // si osservi che 2200 = 2 * 1000 + 200
  }