Problem p00653 (C++) — buggy submission, verdict: Runtime Error

#include <algorithm>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <string>
#include <vector>

using namespace std;
typedef long long ll;

// #define RED_FILE

#ifdef RED_FILE
ifstream ifs("input.txt");
ofstream ofs("output.txt");
#define cin ifs
#define cout ofs
#endif

typedef unsigned int uint;

const uint INF = (uint)2147483647 + (uint)1;
const int MAX_N = 1 << 20;

uint dat[8 * MAX_N];
int n;
int h, w;
int r, c, q;

void init(int h_, int w_) {
  h = w = 1;
  while (h < h_)
    h *= 2;
  while (w < w_)
    w *= 2;
  for (int i = 0; i < 8 * MAX_N; i++)
    dat[i] = INF;
}
// void update(int k,int a){
//	// h*w-1©ç¦nßé
//	k+=h*w-1;
//	dat[k]=a;
//	// oèÈªçindexðXV
//	while(k>0){
//		k=(k-1)/2;
//		dat[k]=min(dat[k*2+1],dat[k*2+2]);
//	}
// }
// uint query(int qminx,int qminy,int qmaxx,int qmaxy,int sminx,int sminy,int
// smaxx,int smaxy,int k){
//	// dÈèªªÈ¢
//	if(qmaxy<sminy||smaxy<qminy||qmaxx<sminx||smaxx<qminx)return INF;
//	// ®SÉÜÜêé
//	if(qminx<=sminx&&smaxx<=qmaxx&&qminy<=sminy&&smaxy<=qmaxy)return dat[k];
//	//
//»ÝxðªµÄ¢é©AyÅªµÄ¢é©Åêí¯
//	uint vl,vr;
//	if(sminy==smaxy){
//		// yðªµI¦Ä¢éê
//		vl=query(qminx,qminy,qmaxx,qmaxy,sminx,sminy,(smaxx+sminx)/2,smaxy,2*k+1);
//		vr=query(qminx,qminy,qmaxx,qmaxy,(smaxx+sminx)/2+1,sminy,smaxx,smaxy,2*k+2);
//	}
//	else{
//		//
//Ü¾yðªµI¦Ä¢È¢ê,yÅª
//		vl=query(qminx,qminy,qmaxx,qmaxy,sminx,sminy,smaxx,(smaxy+sminy)/2,2*k+1);
//		vr=query(qminx,qminy,qmaxx,qmaxy,sminx,(smaxy+sminy)/2+1,smaxx,smaxy,2*k+2);
//	}
//	//if(vl<vr)return vl;
//	//return vr;
//	return min(vl,vr);
// }
// void update(int k,int a){
//	// h*w-1©ç¦nßé
//	k+=h*w-1;
//	dat[k]=a;
//	// oèÈªçindexðXV
//	while(k>0){
//		k=(k-1)/2;
//		dat[k]=min(dat[k*2+1],dat[k*2+2]);
//	}
// }
void update(int qminx, int qminy, int qmaxx, int qmaxy, int sminx, int sminy,
            int smaxx, int smaxy, uint a, int k, bool isHor) {
  // dÈèªªÈ¢
  if (qmaxy < sminy || smaxy < qminy || qmaxx < sminx || smaxx < qminx)
    return;
  // ®SÉÜÜêé
  dat[k] = min(dat[k], a);
  if (qminx <= sminx && smaxx <= qmaxx && qminy <= sminy && smaxy <= qmaxy) {
    // ¡ñÌêðXVµ½çI¹
    return;
  }
  // ¡ñÇ¿çÅØé©
  bool nxt = !isHor;
  // x©yÌª1ÉÈÁ½çAÐûÌÝ©Ä¢­
  if (sminy == smaxy) {
    update(qminx, qminy, qmaxx, qmaxy, sminx, sminy, (smaxx + sminx) / 2, smaxy,
           a, 2 * k + 1, nxt);
    update(qminx, qminy, qmaxx, qmaxy, (smaxx + sminx) / 2 + 1, sminy, smaxx,
           smaxy, a, 2 * k + 2, nxt);
    return;
  } else if (sminx == smaxx) {
    update(qminx, qminy, qmaxx, qmaxy, sminx, sminy, smaxx, (smaxy + sminy) / 2,
           a, 2 * k + 1, nxt);
    update(qminx, qminy, qmaxx, qmaxy, sminx, (smaxy + sminy) / 2 + 1, smaxx,
           smaxy, a, 2 * k + 2, nxt);
    return;
  }
  if (isHor) {
    update(qminx, qminy, qmaxx, qmaxy, sminx, sminy, smaxx, (smaxy + sminy) / 2,
           a, 2 * k + 1, nxt);
    if (sminy != smaxy)
      update(qminx, qminy, qmaxx, qmaxy, sminx, (smaxy + sminy) / 2 + 1, smaxx,
             smaxy, a, 2 * k + 2, nxt);
  } else {
    update(qminx, qminy, qmaxx, qmaxy, sminx, sminy, (smaxx + sminx) / 2, smaxy,
           a, 2 * k + 1, nxt);
    if (smaxx != sminx)
      update(qminx, qminy, qmaxx, qmaxy, (smaxx + sminx) / 2 + 1, sminy, smaxx,
             smaxy, a, 2 * k + 2, nxt);
  }
}

uint query(int qminx, int qminy, int qmaxx, int qmaxy, int sminx, int sminy,
           int smaxx, int smaxy, int k, bool isHor) {
  // dÈèªªÈ¢
  if (qmaxy < sminy || smaxy < qminy || qmaxx < sminx || smaxx < qminx)
    return INF;
  // ®SÉÜÜêé
  if (qminx <= sminx && smaxx <= qmaxx && qminy <= sminy && smaxy <= qmaxy)
    return dat[k];
  // »ÝxðªµÄ¢é©AyÅªµÄ¢é©Åêí¯
  uint vl, vr;
  // ¡ñÇ¿çÅØé©
  bool nxt = !isHor;
  // x©yÌª1ÉÈÁ½çAÐûÌÝ©Ä¢­
  if (sminy == smaxy) {
    vl = query(qminx, qminy, qmaxx, qmaxy, sminx, sminy, (smaxx + sminx) / 2,
               smaxy, 2 * k + 1, nxt);
    vr = query(qminx, qminy, qmaxx, qmaxy, (smaxx + sminx) / 2 + 1, sminy,
               smaxx, smaxy, 2 * k + 2, nxt);
    return min(vl, vr);
  } else if (sminx == smaxx) {
    vl = query(qminx, qminy, qmaxx, qmaxy, sminx, sminy, smaxx,
               (smaxy + sminy) / 2, 2 * k + 1, nxt);
    vr = query(qminx, qminy, qmaxx, qmaxy, sminx, (smaxy + sminy) / 2 + 1,
               smaxx, smaxy, 2 * k + 2, nxt);
    return min(vl, vr);
  }
  if (isHor) {
    vl = query(qminx, qminy, qmaxx, qmaxy, sminx, sminy, smaxx,
               (smaxy + sminy) / 2, 2 * k + 1, nxt);
    if (sminy != smaxy)
      vr = query(qminx, qminy, qmaxx, qmaxy, sminx, (smaxy + sminy) / 2 + 1,
                 smaxx, smaxy, 2 * k + 2, nxt);
    else
      vr = INF;
  } else {
    vl = query(qminx, qminy, qmaxx, qmaxy, sminx, sminy, (smaxx + sminx) / 2,
               smaxy, 2 * k + 1, nxt);
    if (smaxx != sminx)
      vr = query(qminx, qminy, qmaxx, qmaxy, (smaxx + sminx) / 2 + 1, sminy,
                 smaxx, smaxy, 2 * k + 2, nxt);
    else
      vr = INF;
  }
  return min(vl, vr);
}

int main() {
  FILE *fp = stdin;
  // fp=fopen("input.txt","r");
  while (fscanf(fp, "%d %d %d", &r, &c, &q) && !(r == 0 && c == 0 && q == 0)) {
    // while(cin>>r>>c>>q&&!(r==0&&c==0&&q==0)){
    // fast_stream();
    init(r, c);
    for (int i = 0; i < r; i++) {
      for (int j = 0; j < c; j++) {
        int t;
        // cin>>t;
        fscanf(fp, "%d", &t);
        // pdate(i*w+j,t);
        update(j, i, j, i, 0, 0, w - 1, h - 1, t, 0, true);
      }
    }
    for (int i = 0; i < q; i++) {
      int r1, c1, r2, c2;
      // cin>>r1>>c1>>r2>>c2;
      fscanf(fp, "%d %d %d %d", &r1, &c1, &r2, &c2);
      uint res = query(c1, r1, c2, r2, 0, 0, w - 1, h - 1, 0, true);
      // cout<<res<<endl;
      printf("%d\\n", (int)res);
    }
  }
  return 0;
}

Error: 0

Fixed submission:

#include <algorithm>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <string>
#include <vector>

using namespace std;
typedef long long ll;

// #define RED_FILE

#ifdef RED_FILE
ifstream ifs("input.txt");
ofstream ofs("output.txt");
#define cin ifs
#define cout ofs
#endif

typedef unsigned int uint;

const uint INF = (uint)2147483647 + (uint)1;
const int MAX_N = 1 << 20;

uint dat[8 * MAX_N];
int n;
int h, w;
int r, c, q;

void init(int h_, int w_) {
  h = w = 1;
  while (h < h_)
    h *= 2;
  while (w < w_)
    w *= 2;
  for (int i = 0; i < 8 * MAX_N; i++)
    dat[i] = INF;
}
// void update(int k,int a){
//	// h*w-1©ç¦nßé
//	k+=h*w-1;
//	dat[k]=a;
//	// oèÈªçindexðXV
//	while(k>0){
//		k=(k-1)/2;
//		dat[k]=min(dat[k*2+1],dat[k*2+2]);
//	}
// }
// uint query(int qminx,int qminy,int qmaxx,int qmaxy,int sminx,int sminy,int
// smaxx,int smaxy,int k){
//	// dÈèªªÈ¢
//	if(qmaxy<sminy||smaxy<qminy||qmaxx<sminx||smaxx<qminx)return INF;
//	// ®SÉÜÜêé
//	if(qminx<=sminx&&smaxx<=qmaxx&&qminy<=sminy&&smaxy<=qmaxy)return dat[k];
//	//
//»ÝxðªµÄ¢é©AyÅªµÄ¢é©Åêí¯
//	uint vl,vr;
//	if(sminy==smaxy){
//		// yðªµI¦Ä¢éê
//		vl=query(qminx,qminy,qmaxx,qmaxy,sminx,sminy,(smaxx+sminx)/2,smaxy,2*k+1);
//		vr=query(qminx,qminy,qmaxx,qmaxy,(smaxx+sminx)/2+1,sminy,smaxx,smaxy,2*k+2);
//	}
//	else{
//		//
//Ü¾yðªµI¦Ä¢È¢ê,yÅª
//		vl=query(qminx,qminy,qmaxx,qmaxy,sminx,sminy,smaxx,(smaxy+sminy)/2,2*k+1);
//		vr=query(qminx,qminy,qmaxx,qmaxy,sminx,(smaxy+sminy)/2+1,smaxx,smaxy,2*k+2);
//	}
//	//if(vl<vr)return vl;
//	//return vr;
//	return min(vl,vr);
// }
// void update(int k,int a){
//	// h*w-1©ç¦nßé
//	k+=h*w-1;
//	dat[k]=a;
//	// oèÈªçindexðXV
//	while(k>0){
//		k=(k-1)/2;
//		dat[k]=min(dat[k*2+1],dat[k*2+2]);
//	}
// }
void update(int qminx, int qminy, int qmaxx, int qmaxy, int sminx, int sminy,
            int smaxx, int smaxy, uint a, int k, bool isHor) {
  // dÈèªªÈ¢
  if (qmaxy < sminy || smaxy < qminy || qmaxx < sminx || smaxx < qminx)
    return;
  // ®SÉÜÜêé
  dat[k] = min(dat[k], a);
  if (qminx <= sminx && smaxx <= qmaxx && qminy <= sminy && smaxy <= qmaxy) {
    // ¡ñÌêðXVµ½çI¹
    return;
  }
  // ¡ñÇ¿çÅØé©
  bool nxt = !isHor;
  if (isHor) {
    update(qminx, qminy, qmaxx, qmaxy, sminx, sminy, smaxx, (smaxy + sminy) / 2,
           a, 2 * k + 1, nxt);
    if (sminy != smaxy)
      update(qminx, qminy, qmaxx, qmaxy, sminx, (smaxy + sminy) / 2 + 1, smaxx,
             smaxy, a, 2 * k + 2, nxt);
  } else {
    update(qminx, qminy, qmaxx, qmaxy, sminx, sminy, (smaxx + sminx) / 2, smaxy,
           a, 2 * k + 1, nxt);
    if (smaxx != sminx)
      update(qminx, qminy, qmaxx, qmaxy, (smaxx + sminx) / 2 + 1, sminy, smaxx,
             smaxy, a, 2 * k + 2, nxt);
  }
  //	if(sminy==smaxy){
  //		// yðªµI¦Ä¢éê
  //		vl=query(qminx,qminy,qmaxx,qmaxy,sminx,sminy,(smaxx+sminx)/2,smaxy,2*k+1);
  //		vr=query(qminx,qminy,qmaxx,qmaxy,(smaxx+sminx)/2+1,sminy,smaxx,smaxy,2*k+2);
  //	}
  //	else{
  //		//
  //Ü¾yðªµI¦Ä¢È¢ê,yÅª
  //		vl=query(qminx,qminy,qmaxx,qmaxy,sminx,sminy,smaxx,(smaxy+sminy)/2,2*k+1);
  //		vr=query(qminx,qminy,qmaxx,qmaxy,sminx,(smaxy+sminy)/2+1,smaxx,smaxy,2*k+2);
  //	}
  // if(vl<vr)return vl;
  // return vr;
}

uint query(int qminx, int qminy, int qmaxx, int qmaxy, int sminx, int sminy,
           int smaxx, int smaxy, int k, bool isHor) {
  // dÈèªªÈ¢
  if (qmaxy < sminy || smaxy < qminy || qmaxx < sminx || smaxx < qminx)
    return INF;
  // ®SÉÜÜêé
  if (qminx <= sminx && smaxx <= qmaxx && qminy <= sminy && smaxy <= qmaxy)
    return dat[k];
  // »ÝxðªµÄ¢é©AyÅªµÄ¢é©Åêí¯
  uint vl, vr;
  // ¡ñÇ¿çÅØé©
  bool nxt = !isHor;
  if (isHor) {
    vl = query(qminx, qminy, qmaxx, qmaxy, sminx, sminy, smaxx,
               (smaxy + sminy) / 2, 2 * k + 1, nxt);
    if (sminy != smaxy)
      vr = query(qminx, qminy, qmaxx, qmaxy, sminx, (smaxy + sminy) / 2 + 1,
                 smaxx, smaxy, 2 * k + 2, nxt);
    else
      vr = INF;
  } else {
    vl = query(qminx, qminy, qmaxx, qmaxy, sminx, sminy, (smaxx + sminx) / 2,
               smaxy, 2 * k + 1, nxt);
    if (smaxx != sminx)
      vr = query(qminx, qminy, qmaxx, qmaxy, (smaxx + sminx) / 2 + 1, sminy,
                 smaxx, smaxy, 2 * k + 2, nxt);
    else
      vr = INF;
  }
  //	if(sminy==smaxy){
  //		// yðªµI¦Ä¢éê
  //		vl=query(qminx,qminy,qmaxx,qmaxy,sminx,sminy,(smaxx+sminx)/2,smaxy,2*k+1);
  //		vr=query(qminx,qminy,qmaxx,qmaxy,(smaxx+sminx)/2+1,sminy,smaxx,smaxy,2*k+2);
  //	}
  //	else{
  //		//
  //Ü¾yðªµI¦Ä¢È¢ê,yÅª
  //		vl=query(qminx,qminy,qmaxx,qmaxy,sminx,sminy,smaxx,(smaxy+sminy)/2,2*k+1);
  //		vr=query(qminx,qminy,qmaxx,qmaxy,sminx,(smaxy+sminy)/2+1,smaxx,smaxy,2*k+2);
  //	}
  // if(vl<vr)return vl;
  // return vr;
  return min(vl, vr);
}

int main() {
  FILE *fp = stdin;
  // fp=fopen("input.txt","r");
  while (fscanf(fp, "%d %d %d", &r, &c, &q) && !(r == 0 && c == 0 && q == 0)) {
    // while(cin>>r>>c>>q&&!(r==0&&c==0&&q==0)){
    // fast_stream();
    init(r, c);
    for (int i = 0; i < r; i++) {
      for (int j = 0; j < c; j++) {
        int t;
        // cin>>t;
        fscanf(fp, "%d", &t);
        // pdate(i*w+j,t);
        update(j, i, j, i, 0, 0, w - 1, h - 1, t, 0, true);
      }
    }
    for (int i = 0; i < q; i++) {
      int r1, c1, r2, c2;
      // cin>>r1>>c1>>r2>>c2;
      fscanf(fp, "%d %d %d %d", &r1, &c1, &r2, &c2);
      uint res = query(c1, r1, c2, r2, 0, 0, w - 1, h - 1, 0, true);
      // cout<<res<<endl;
      printf("%d\\n", (int)res);
    }
  }
  return 0;
}