Vijos P1988 自行車比賽(treap)

2021-07-24 08:22:52 字數 1345 閱讀 5592

思路:

如果我們判斷第i個人是否能第一, 只需要把盡量小的分值給分數最大的人, 如果有人超過了他, 就不能得第一。

我們可以把n個人排序, 讓2~n個人分別加上n-1~1, 用treap維護最大值。 轉移到下乙個人的時候, 只需要把下乙個人的加分加到當前這個人上就行了。

ps:用treap的原因是set被卡了。 吐槽:set太慢了。

細節參見**:

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define max(a,b) ((a)>(b)?(a):(b))

#define min(a,b) ((a)<(b)?(a):(b))

using namespace std;

typedef long long ll;

typedef long double ld;

const double eps = 1e-6;

const double pi = acos(-1);

const int mod = 1000000000 + 7;

const int inf = 0x3f3f3f3f;

const int seed = 131;

const ll inf64 = ll(1e18);

const int maxn = 300000 + 10;

int t,n,m,a[maxn];

struct node

int cmp(int x) const

void maintain()

} *g;

void rotate(node* &o, int d)

void insert(node* &o, int x)

o->maintain();

}void remove(node* &o, int x)

else

}else remove(o->ch[d], x);

if(o != null) o->maintain();

}void removetree(node* &x)

int main()

int ans = 0;

sort(a+1, a+n+1);

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

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

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

return 0;

}

Jzoj 1238 自行車比賽

自行車賽在乙個很大的地方舉行,有n nn個鎮,用1 11到n nn編號,鎮與鎮之間有m mm條單行道相連,起點設在鎮1 11,終點設在鎮222。問從起點到終點一共有多少種不同的路線。兩條路線只要不使用完全相同的道路就被認為是不同的。很容易發現1 11到2 22的路線中,只要有環,則為inf infi...

JZOJ 1238 自行車比賽

description 自行車賽在乙個很大的地方舉行,有n個鎮,用1到n編號,鎮與鎮之間有m條單行道相連,起點設在鎮1,終點設在鎮2。問從起點到終點一共有多少種不同的路線。兩條路線只要不使用完全相同的道路就被認為是不同的。input 第一行兩個整數 n和m 1 n 10000,1 m 100000 ...

卸貨自行車

以下是文章主要內容 我第一次騎yuba supermarche載貨自行車的時候,它比起我那輛輕盈敏捷的汽車感覺就像是只笨拙的怪獸。但在舊金山騎了幾個星期之後,我顯然看到了城市交通的未來。你可以將載貨自行車看作是輕型的多用途運載車,可以用它來說送小孩上學,可以用它來裝載食品雜貨,也可以用它來將在好市多...