HNOI2017 影魔 單調棧 掃瞄線

2022-09-10 00:18:24 字數 1505 閱讀 2028

本來這道題應該很簡單的,越寫越複雜orz

time limit: 20 sec  memory limit: 512 mb

submit: 912  solved: 546

[submit][status][discuss]影魔,奈文摩爾,據說有著乙個詩人的靈魂。事實上,他吞噬的詩人靈魂早已成千上萬。千百年來,他收集了各式各樣

的靈魂,包括詩人、牧師、帝王、乞丐、奴隸、罪人,當然,還有英雄。每乙個靈魂,都有著自己的戰鬥力,而影魔,靠

這些戰鬥力提公升自己的攻擊。奈文摩爾有 n 個靈魂,他們在影魔寬廣的體內可以排成一排,從左至右標號 1 到 n。

第 i個靈魂的戰鬥力為 k[i],靈魂們以點對的形式為影魔提供攻擊力,對於靈魂對 i,j(i而 k[s]不存在,這時提供 p1 的攻擊力;當 j>i+1 時,若maxz[maxn*2],*rt; int tot,tt;

void mt(nd *&p,int l,int r)

void ptd(nd *&p)

void ad(nd *&p,int l,int r,int x,int y,int o) ptd(p);

if(y>=l&&x<=mid) ad(p->ls,l,mid,x,y,o);

if(y>mid&&x<=r) ad(p->rs,mid+1,r,x,y,o);

p->sm=p->ls->sm+p->rs->sm;

}ll qr(nd *&p,int l,int r,int x,int y)

int n,m,p1,p2,ans[maxn],st[maxn],tp,l[maxn],r[maxn],a[maxn];

namespace ooo

void add(int x,int d)

struct ooq[maxn];

int sta[maxn],top,nt[maxn];

struct nodez[maxn*3]; int tot;

bool cmp(node aa,node bb)

void solve() ;}}

for(int i=1;i<=m;i++)

sort(z+1,z+1+tot,cmp);

for(int i=1;i<=tot;i++)

for(int i=1;i<=n;i++) bit[i] = 0;

}void mmm()

solve();}}

struct ozw[maxn*6]; bool cmp(oz aa,oz bb) st[tp=0]=n+1; mt(rt,1,n);

for(int i=1;i<=m;i++)

for(int i=n;i>0;i--)

}sort(w+1,w+1+tt,cmp);

for(int i=1;i<=tt;i++)

else if(w[i].iid==-24444444)

else

}ooo::mmm();

for(int i=1;i<=m;i++) printf("%lld\n",ans[i]);

}

題解 AHOI HNOI2017 影魔

毒瘤了乙個下午。首先這個題是裂開的,就算乙個 p 1 和 p 2 的係數就好了。先轉化一下題意,設區間 i,j 中的最大值為 m 那麼 p 1 的係數就是滿足 m le min 的 i,j 點對的個數,p 2 的係數就是滿足 min m max 的點對個數。然後這個第乙個子任務是沒有意義的,然後考慮...

AHOI HNOI2017 影魔 題解

傳送門qaq 首先有乙個套路 我自己總結的,錯了別罵窩 qwq 統計滿足類似 i lt j lt k 且 a i lt a j lt a k 的關係的 i,j,k 數量的這類題一般來說突破點都是中間的 j 並且一般會採用單調棧處理。這道題的預處理就是這個套路 首先對於每個 i 求出左邊離 i 最近的...

HNOI2017 傷感之中充滿希望

幾個月前,我曾經對這樣一天滿懷期待 為此,我立下了海誓山盟 認真讀書,認真刷題,認真備考。幾個月後,我沒有做錯什麼。我只是輸給了現實。回到家,已是傍晚,轉角,告別了車水馬龍的街道,又彷彿傾吐了新的告白 期中考試在即,即將到來的是瘋狂的七十二小時。或許,我也可以說,過去的,是瘋狂的四十八小時。夜幕降臨...