fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define TASK "test"
  5.  
  6. #define ll long long
  7. #define fi first
  8. #define sc second
  9. #define ii pair <int, int>
  10.  
  11. #define rep(i,s,e) for (int i = (s), _e = (e); i <= _e; i++)
  12. #define reo(i,s,e) for (int i = (s), _e = (e); i >= _e; i--)
  13.  
  14. const int maxn = 2000;
  15. const int mod = 1e9 + 7;
  16. const int inf = 1e9;
  17.  
  18. int n, m, q;
  19. char a[maxn + 5][maxn + 5];
  20. int pre[3][maxn + 5][maxn + 5];
  21.  
  22. int rect (int t, int u, int v, int x, int y)
  23. {
  24. return pre[t][x][y] - pre[t][x][v - 1] - pre[t][u - 1][y] + pre[t][u - 1][v - 1];
  25. }
  26.  
  27. signed main ()
  28. {
  29. cin.tie(0)->sync_with_stdio(false);
  30. // #ifndef ONLINE_JUDGE
  31. // freopen(TASK".inp","r",stdin);
  32. // freopen(TASK".out","w",stdout);
  33. // #endif
  34.  
  35. cin >> n >> m >> q;
  36. rep (i, 1, n) rep (j, 1, m)
  37. cin >> a[i][j];
  38.  
  39. rep (i, 1, n) rep (j, 1, m)
  40. {
  41. pre[0][i][j] = pre[0][i - 1][j] + pre[0][i][j - 1] - pre[0][i - 1][j - 1] + (a[i][j] == '1');
  42. pre[1][i][j] = pre[1][i - 1][j] + pre[1][i][j - 1] - pre[1][i - 1][j - 1] + (a[i][j] == '1' and a[i][j + 1] == '1');
  43. pre[2][i][j] = pre[2][i - 1][j] + pre[2][i][j - 1] - pre[2][i - 1][j - 1] + (a[i][j] == '1' and a[i + 1][j] == '1');
  44. }
  45.  
  46. while (q--)
  47. {
  48. int u, v, x, y;
  49. cin >> u >> v >> x >> y;
  50. int num = rect(0, u, v, x, y);
  51. int one = rect(1, u, v, x, y - 1);
  52. int two = rect(2, u, v, x - 1, y);;
  53. cout << num - one - two << '\n';
  54. }
  55.  
  56. return 0;
  57. }
  58.  
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
Standard output is empty