思路:
如果我們判斷第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載貨自行車的時候,它比起我那輛輕盈敏捷的汽車感覺就像是只笨拙的怪獸。但在舊金山騎了幾個星期之後,我顯然看到了城市交通的未來。你可以將載貨自行車看作是輕型的多用途運載車,可以用它來說送小孩上學,可以用它來裝載食品雜貨,也可以用它來將在好市多...