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