P4053 [JSOI2007]建築搶修

來源:互聯網
上載者:User

標籤:sdi   double   stream   getchar   char   dig   修複   pre   span   

題意:n個建築,每個都需要修複,需要$t_i$的時間

   若在$w_i$時之前還沒修好,則GG

   問最多能修幾個

 

 

按GG時間排序

設當前建築為i

若i能修,就修了

若不能修,在堆(維護$t_i$最大值)中找到之前最大的$t_j$

若$t_j>t_i$那麼很顯然修當前的更優,就進行反悔操作

不修j了,修i

#include<cstdio>#include<iostream>#include<cstring>#include<cctype>#include<queue>#include<algorithm>using namespace std;#define int long long#define olinr return#define _ 0#define love_nmr 0#define DB doublepriority_queue<int> q;inline int read(){    int x=0,f=1;    char ch=getchar();    while(!isdigit(ch))    {        if(ch==‘-‘)            f=-f;        ch=getchar();    }    while(isdigit(ch))    {        x=(x<<1)+(x<<3)+(ch^48);        ch=getchar();    }    return x*f;}inline void put(int x){    if(x<0)    {        x=-x;        putchar(‘-‘);    }    if(x>9)        put(x/10);    putchar(x%10+‘0‘);}int n;struct node{    int t1;    int t2;    friend bool operator < (const node &a,const node &b)    {        return a.t2<b.t2;    }}a[155050];int ans;signed main(){    n=read();    for(int i=1;i<=n;i++)    {        a[i].t1=read();        a[i].t2=read();    }    sort(a+1,a+n+1);    int t=0;    q.push(0);    for(int i=1;i<=n;i++)    {        if(t+a[i].t1>a[i].t2)        {            if(a[i].t1<q.top())            {                t-=q.top();                q.pop();                q.push(a[i].t1);                t+=a[i].t1;            }        }        else        {            q.push(a[i].t1);            ans++;            t+=a[i].t1;        }    }    put(ans);    olinr ~~(0^_^0)+love_nmr;}

 

P4053 [JSOI2007]建築搶修

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

Tags Index: