Submission #274552

#TimeUsernameProblemLanguageResultExecution timeMemory
274552shinjanQuality Of Living (IOI10_quality)C++14
60 / 100
5023 ms18856 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; //cout<<"trazimo:"<<mineq<<endl; while(l<r-1) { //cout<<"l="<<l<<" r="<<r<<" mid="<<mid<<endl; if(sum(mid)>=mineq) { r=mid; } else{ l=mid; } mid=(r+l)/2; } if(sum(l)==mineq) { return l; } return r; } 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++) { //cout<<"gornje levo: "<<i<<" "<<j<<endl; 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); } //cout<<"median: "<<findMedian(r*c,mineq)<<endl; 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...