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...