bzoj千题计划148:bzoj1537: [POI2005]Aut- The Bus

Posted 日拱一卒 功不唐捐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj千题计划148:bzoj1537: [POI2005]Aut- The Bus相关的知识,希望对你有一定的参考价值。

http://www.lydsy.com/JudgeOnline/problem.php?id=1537

 

朴素的转移:dp[i][j]=max(dp[i][j-1],dp[i-1][j])+p[i][j]

树状数组优化

按x排序,离散化y

枚举,排序保证x,树状数组查询y

 

#include<cstdio>
#include<iostream>
#include<algorithm>

using namespace std;

#define N 100001

#define lowbit(x) x&-x

int c[N];

struct node
{
    int x,y,p;
}e[N];

int tot,has[N];

void read(int &x)
{
    x=0; char c=getchar();
    while(!isdigit(c))  c=getchar(); 
    while(isdigit(c)) { x=x*10+c-0; c=getchar();  }
}

void change(int x,int y)
{
    while(x<=tot)
    {
        c[x]=max(c[x],y);
        x+=lowbit(x);
    }
}

int query(int x)
{
    int mx=0;
    while(x)
    {
        mx=max(mx,c[x]);
        x-=lowbit(x);
    }
    return mx;
}

bool cmp(node p,node q)
{
    if(p.y!=q.y) return p.y<q.y;
    return p.x<q.x;
}

int main()
{
    int n,m,k;
    read(n); read(m); read(k);
    for(int i=1;i<=k;++i)
    {
        read(e[i].x);
        read(e[i].y);
        read(e[i].p);
        has[i]=e[i].x;
    }
    sort(has+1,has+k+1);
    tot=unique(has+1,has+k+1)-has-1;
    sort(e+1,e+k+1,cmp);
    int tmp,pos; int ans=0;
    for(int i=1;i<=k;++i)
    {
        pos=lower_bound(has+1,has+tot+1,e[i].x)-has;
        tmp=e[i].p+query(pos);
        ans=max(ans,tmp);
        change(pos,tmp);
    }
    cout<<ans;
}

 

以上是关于bzoj千题计划148:bzoj1537: [POI2005]Aut- The Bus的主要内容,如果未能解决你的问题,请参考以下文章

bzoj千题计划197:bzoj4247: 挂饰

bzoj千题计划118:bzoj1028: [JSOI2007]麻将

bzoj千题计划165:bzoj5127: 数据校验

bzoj千题计划144:bzoj1176: [Balkan2007]Mokia

bzoj千题计划177:bzoj1858: [Scoi2010]序列操作

bzoj千题计划142:bzoj3144: [Hnoi2013]切糕