51nod 演算法馬拉松12 逛街 treap

2021-07-10 22:54:42 字數 1569 閱讀 5755

做法:

首先看找滿足 ci 的和等於 k 的位置.沒有則輸出-1.把掃到過的商店的bi值插入到treap裡面,暴力列舉lyk最後訪問的是當前的這個位置, 用treap找剩下還能夠用的時間left 所能訪問的前面的商店的個數,更新答案. 有乙個坑點就是k等於0的時候,re了幾次-_-||

#include 

#include

#include

#include

#include

#include

using namespace std;

#pragma comment(linxer, "/stack:102400000,102400000")

#define ll long long

#define pii pair

#define mp make_pair

#define ls i << 1

#define rs ls | 1

#define md (ll + rr >> 1)

#define lson ll, md, ls

#define rson md + 1, rr, rs

#define mod 1000000007

#define inf 0x3f3f3f3f

#define n 3000020

#define m 500010

int ch[n][2], rand_val[n], sz[n], key[n], tot;

ll sum[n], s1, s2;

int a[n], b[n], c[n], n, k;

ll t;

priority_queue q;

int creat(int val)

int cmp(int x, int val)

void push_up(int x)

void rot(int &x, int d)

void insert(int &x, int val)

int d = cmp(x, val);

if(d == -1)

d = 1;

insert(ch[x][d], val);

if(rand_val[ch[x][d]] > rand_val[x]) rot(x, d ^ 1);

push_up(x);

}void del(int &x, int val)

}else del(ch[x][d], val);

if(x) push_up(x);

}int query(int x, ll v)

int main()

else

if(k == k) break;}}

int ans = -1;

if(k == k)

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

if(u <= b[i])

}else

}else

insert(root, b[i]);}}

}printf("%d\n", ans);

return

0;}

51nod演算法馬拉松32

比賽鏈結 馬拉松是真的難 應該是我太菜了tnt 同bzoj1534 題解戳這裡 n個有標號的點,其中m個是葉子節點。問有多少數的形態。include include include include include using namespace std typedef long long ll co...

51nod演算法馬拉松15

智力徹底沒有了。看來再也拿不到獎金了qaq。a b君的遊戲 因為資料是9b1l,所以我們可以hash試一下資料。include include include include define rep i,s,t for int i s i t i define dwn i,s,t for int i ...

51nod演算法馬拉松13

a 取餘最長路 不難發現路徑可以拆成三條線段,只要知道兩個轉折點的位置就能計算出答案。設sum i,l,r 表示第i行從l到r元素的和,則答案可以表示為sum 1,1,x sum 2,x,y sum 3,y,n p。字首和一下轉化成 s3 n s3 y 1 s2 y s1 x s2 x 1 p,從小...