Submission #274491

#TimeUsernameProblemLanguageResultExecution timeMemory
274491shinjan삶의 질 (IOI10_quality)C++14
0 / 100
1 ms512 KiB
#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; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...