社区讨论
为什么没减一就过了
P4155[SCOI2015] 国旗计划参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m2c0nkbb
- 此快照首次捕获于
- 2024/10/16 23:17 去年
- 此快照最后确认于
- 2024/10/17 12:22 去年
CPP
#include <bits/stdc++.h>
#define foo(i, a, b) for (int i = a; i <= b; i++)
#define joo(i, a, b) for (int i = a; i >= b; i--)
#define mabs(a) ((a) < 0 ? (-(a)) : (a))
#define pow2(x) (1 << x)
#define QwQ 0
typedef long long ll;
typedef double dob;
const int MAXN = 2e5 + 17;
//const int MAXM = ;
using namespace std;
struct node {
int c, d, id;
bool operator < (node b) const {
return c < b.c;
}
}z[ 2 * MAXN];
int n, m, f[2 * MAXN][30], n2, lg[2 * MAXN + 17], res[MAXN];
void init() {
int pos = 1;
for (int i = 1; i <= n2; i ++) {
while (z[pos].c <= z[i].d && pos <= n2) {
pos ++;
}
f[i][0] = pos - 1;
}
for (int i = 1; i <= 25; i ++) {
for (int s = 1; s <= n2; s ++) {
f[s][i] = f[f[s][i - 1]][i - 1];
}
}
}
void get_ans(int x) {
int len = z[x].d + m, cur = x, ans = 1;
for (int i = 25; i >= 0; i--) {
int pos = f[cur][i];
if (z[pos].d < len && pos != 0 ) {
ans += 1 << i;
cur = pos;
// cerr << ans << ' ';
}
}//cerr << '\n';
res[z[x].id] = ans ;
}
int main() {
cin >> n >> m;
foo (i, 1, n) {
cin >> z[i].c >> z[i].d ;
z[i].id = i;
if (z[i].d < z[i].c) {
z[i].d += m;
}
}
n2 = n;
sort (z + 1, z + n + 1) ;
for (int i = 1; i <= n; i ++) {
++n2;
z[n2] = z[i];
z[n2].c += m; z[n2].d += m; z[n2].id = 0;
}
init();
for (int i = 1; i <= n; i ++) get_ans(i);
foo(i, 1, n) cout << res[i] << ' ';
return QwQ;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...