省選專練POI2015Kinoman

2021-08-19 17:42:01 字數 1361 閱讀 5681

小目標:高考假以內,做完poi2015

和poi2014的一半

怎麼搞?

實際套路也挺簡單的。

你看:l,r。這是n*n的演算法

一般來說1e6 怎麼搞是on *✧⁺˚⁺ପ(๑・ω・)੭ु⁾⁾

但是onlogn 卻必須得跑過

原因是一般來說解決是列舉乙個l 或者是中位數。

但是必須得log 那麼毒瘤卡常數

你用乙個後向星記錄乙個 pre即上乙個為wi 和 last

然後區間更新 pre i +1 ,i  +wi

pre(pre)+1 ,pre i -wi

然後查詢到l位置最大值

#includeusing namespace std;

typedef int int;

#define int long long

const int n=1e6+100;

inline void read(int &x)

while(ch>='0'&&ch<='9')

x*=f;

}struct max_queryt[n<<2];

void build(int p,int l,int r)

int mid=(l+r)/2;

build(lc,l,mid);

build(rc,mid+1,r);

} inline void pushup(int p)

inline void pushdown(int p)

} inline void update(int p,int l,int r,int val)

int mid=(t[p].lson+t[p].rson)/2;

pushdown(p);

if(l<=mid) update(lc,l,r,val);

if(midpushup(p);

} inline int query(int p,int l,int r)

pushdown(p);

int mid=(t[p].lson+t[p].rson)/2;

if(l<=mid) ret=max(ret,query(lc,l,r));

if(midreturn ret;

}}t;

int pre[n]={};

int last[n]={};

int a[n]={};

int w[n]={};

int n,m;

int main()

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

t.build(1,1,n);

int ans=-1;

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

cout<}

省選專練 POI2014 RAJ Rally

又是一道神仙題 太神仙了 第一步 考慮這是有向無環圖,故思考topsort?我真是想不到 由於這是有向無環圖 定義f i 為到達i的最長路徑 g i 為從i出發的最長路徑 故 f u g v 1為最長鏈 用乙個可刪除堆優化一下就好了 includeusing namespace std const ...

省選專練HEOI2015兔子和櫻花

毒瘤貪心。第一他長得太像貪心了。而且下標位置是0 n 1 我最先tmmmp看樣例以為是乙個仙人掌。貪心,每次選最優的,也就是代價最小的。注意刪去乙個兒子,c i 要相對 1 include include include include includeusing namespace std cons...

省選專練SDOI2015約數個數和

然後對於trunc n d 只有根號n個解,跳就完了。include include include include includeusing namespace std define ll long long const int maxn 55000 bool vis 60000 ll prim ...