#include<iostream>
#include<cstdio>
#define rep(i,j,k) for(register int i(j);i<=k;++i)
#define drp(i,j,k) for(register int i(j);i>=k;--i)
using namespace std;
typedef long long lxl;
template<typename T>
inline T max(T &a, T &b) {
return a > b ? a : b;
}
template<typename T>
inline T min(T &a, T &b) {
return a < b ? a : b;
}
inline char gt() {
static char buf[1 << 21], *p1 = buf, *p2 = buf;
return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++;
}
template <typename T>
inline void read(T &x) {
register char ch = gt();
x = 0;
int w(0);
while(!(ch >= '0' && ch <= '9'))w |= ch == '-', ch = gt();
while(ch >= '0' && ch <= '9')x = x * 10 + (ch & 15), ch = gt();
w ? x = ~(x - 1) : x;
}
template <typename T>
inline void out(T x) {
if(x < 0) x = -x, putchar('-');
char ch[20];
int num(0);
while(x || !num) ch[++num] = x % 10 + '0', x /= 10;
while(num) putchar(ch[num--]);
putchar('\n');
}
const int N = 5e5 + 79;
const int MI = 207;
int DAY, n, m, q;
#define bug puts("~~~~");
namespace solve1 {
lxl sum[MI][MI][1007];
int num[MI][MI][1007];
lxl p[MI][MI];
inline lxl getsum(int a, int b, int c, int d, int k) {
return sum[c][d][k] - sum[a - 1][d][k] - sum[c][b - 1][k] + sum[a - 1][b - 1][k];
}
inline int getnum(int a, int b, int c, int d, int k) {
return num[c][d][k] - num[a - 1][d][k] - num[c][b - 1][k] + num[a - 1][b - 1][k];
}
int main() {
rep(i, 1, n) {
rep(j, 1, m) {
read(p[i][j]);
}
}
rep(k, 1, 1007) {
rep(i, 1, n) {
rep(j, 1, m) {
sum[i][j][k] = sum[i - 1][j][k] + sum[i][j - 1][k] - sum[i - 1][j - 1][k] + p[i][j] * (p[i][j] >= k);
num[i][j][k] = num[i - 1][j][k] + num[i][j - 1][k] - num[i - 1][j - 1][k] + (p[i][j] >= k);
}
}
}
int x1, x2, y1, y2;
lxl H;
while(q--) {
read(x1);
read(y1);
read(x2);
read(y2);
read(H);
if(getsum(x1, y1, x2, y2, 1) < H) {
puts("Poor QLW");
continue;
}
int l = 1, r = 1000, mid, ans = 0, tot = 0;
while(l <= r) {
mid = (l + r >> 1);
if(getsum(x1, y1, x2, y2, mid) >= H) {
l = mid + 1;
ans = mid;
} else r = mid - 1;
}
out(getnum(x1, y1, x2, y2, ans) - (getsum(x1, y1, x2, y2, ans) - H) / ans);
}
return 0;
}
}//СÊý¾Ý
namespace solve2 {
lxl p[N];
int cnt;
int rt[N],lc[N<<5],rc[N<<5],sum[N<<5],num[N<<5];
inline void insert(int &now,int pre,int L,int R,int pos,int cntv,int nv){
now=++cnt;
lc[now]=lc[pre];
rc[now]=rc[pre];
sum[now]=sum[pre]+nv;
num[now]=num[pre]+cntv;
if(L==R){
return;
}
int mid(L+R>>1);
if(pos<=mid) insert(lc[now],lc[pre],L,mid,pos,cntv,nv);
else insert(rc[now],rc[pre],mid+1,R,pos,cntv,nv);
}
inline int ask(int p,int q,int L,int R,int H){
if(L==R) return (H-1)/L+1;
int mid(L+R>>1);
int rnum=num[rc[q]]-num[rc[p]];
int rsum=sum[rc[q]]-sum[rc[p]];
if(H<=rsum) return ask(rc[p],rc[q],mid+1,R,H);//̰ÐÄÕÒ´óµÄ
else return ask(lc[p],lc[q],L,mid,H-rsum)+rnum;
}
int main() {
rep(i, 1, m) {
read(p[i]);
insert(rt[i],rt[i-1],1,1007,p[i],1,p[i]);
}
int x1, x2, y1, y2;
lxl H;
while(q--){
read(x1);
read(y1);//
read(x2);
read(y2);//
read(H);
if(sum[rt[x2]]-sum[rt[x1-1]]<H) {
puts("Poor QLW");
continue;
}
out(ask(rt[x1-1],rt[x2],1,1007,H));
}
return 0;
}
}
int main() {
read(n);
read(m);
read(q);
if(n == 1)
solve2::main();
else
solve1::main();
return 0;
}
后面50tps全部输出Poor..