Cod sursa(job #1492755)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 28 septembrie 2015 09:40:52
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,f,dx,dy;
int arb[250023];
struct str
{
    int st;
    int dr;
    int y;
    int val;
}a[60023];
int comp(str a,str b)
{
    return a.y<b.y;
}
void update(int s,int e,int p1,int p2,int val,int nod)
{
    if(s==p1&&e==p2) arb[nod]+=val;
    else
    {
        int mij=(s+e)/2;
        if(p2<=mij) update(s,mij,p1,p2,val,2*nod);
        else if(p1>mij) update(mij+1,e,p1,p2,val,2*nod+1);
        else
        {
            update(s,mij,p1,mij,val,2*nod);
            update(mij+1,e,mij+1,p2,val,2*nod+1);
        }
    }
}
int query(int s,int e,int nr,int sum,int nod)
{
    if(s==e) return (sum+arb[nod]);
    else
    {
        int mij=(s+e)/2;
        if(nr<=mij) return query(s,mij,nr,sum+arb[nod],nod*2);
        return query(mij+1,e,nr,sum+arb[nod],nod*2+1);
    }
}
int main()
{
   // freopen ("demolish.in","r",stdin);
   // freopen ("demolish.out","w",stdout);
    scanf("%d%d%d%d%d",&m,&n,&f,&dx,&dy);
    int l=0,x1,x2,y1,y2,cost;
    for(int i=1;i<=f;i++)
    {
        scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&cost);
        ++l;
        a[l].st=x1;
        a[l].dr=x2;
        a[l].y=y1;
        a[l].val=cost;
        ++l;
        a[l].st=x1;
        a[l].dr=x2;
        a[l].y=y2+dy;
        a[l].val=-cost;
    }
    sort(a+1,a+l+1,comp);
    int minim=1000000000;
    for(int i=1;i<=l;i++)
    {
        int c1=0,c2=0;
        printf("%d %d %d %d\n",a[i].st,a[i].dr,c1,c2);
        c1=max(1,a[i].st-dx+1);
        c2=min(n-dx+1,a[i].dr+dx-1);
        update(1,n-dx+1,c1,c2,1,a[i].val);
        for(int j=1;j<=n-dx+1;j++)
        {
            if(minim>query(1,n,j,0,1)) minim=query(1,n,j,0,1);
        }
    }
    printf("%d",minim);
}