#include <iostream>
#include <bits/stdc++.h>
#define maxN 3000
#include "quality.h"
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int fen[maxN*maxN+1];
void add(int val,int maks)
{
for(int i=val;i<=maks;i+=(i&(-i)))
{
fen[i]++;
}
}
void brisi(int val,int maks)
{
for(int i=val;i<=maks;i+=(i&(-i)))
{
fen[i]--;
}
}
int sum(int ind)
{
int ans=0;
for(int i=ind;i>=1;i-=(i&(-i)))
{
ans+=fen[i];
}
return ans;
}
int findMedian(int maks,int mineq)
{
int r=maks,l=1;
int mid=(r+l)/2;
while(l<r-1)
{
if(sum(mid)>mineq)
{
r=mid;
}
else{
l=mid;
}
mid=(r+l)/2;
}
if(sum(r)==mineq)
{
return r;
}
return l;
}
int rectangle(int r,int c,int h,int w,int q[3001][3001])
{
int ans=INT_MAX;
int mineq=(h*w)/2+1;
for(int i=0;i+h-1<r;i++)
{
for(int ind=i;ind<h+i;ind++)
{
for(int j=0;j<w;j++)
{
add(q[ind][j],r*c);
}
}
ans=min(ans,findMedian(r*c,mineq));
for(int j=1;j+w-1<c;j++)
{
for(int ind=i;ind<i+h;ind++)
{
brisi(q[ind][j-1],r*c);
}
for(int ind=i;ind<i+h;ind++)
{
add(q[ind][j+w-1],r*c);
}
ans=min(ans,findMedian(r*c,mineq));
}
for(int ind=i;ind<h+i;ind++)
{
for(int j=0;j<w;j++)
{
brisi(q[ind][c-1-j],r*c);
}
}
}
return ans;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
512 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
512 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
512 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
512 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
512 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |