不知道错在哪里
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 400000 + 100;
int n, m;
struct node{
int c, d, id;
}arr[maxn];
bool cmp(node x, node y) {
if(x.c == y.c) {
return x.d < y.d;
}
return x.c < y.c;
}
int to[maxn];
int dp[maxn][64]; // dp[i][j]表示i位置2^j个人可以跳到哪
int ans[maxn];
signed main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> m;
for(int i=1; i<=n; ++i) {
cin >> arr[i].c >> arr[i].d;
if(arr[i].d<arr[i].c) arr[i].d += m;
arr[i].id = i;
}
sort(arr+1, arr+1+n, cmp);
int right = 1;
for(int i=1; i<=n; ++i) {
arr[i+n].c = arr[i].c+m; arr[i+n].d = arr[i].d + m;
arr[i+n].id = i;
}
for(int i=1; i<=2*n; ++i) {
while(right <= 2*n and arr[i].d >= arr[right].c) {
++right;
}
dp[i][0] = right-1;
}
for(int i=1; i<=2*n; ++i) {
for(int j=1; j<63; ++j) {
dp[i][j] = dp[dp[i][j-1]][j-1];
}
}
for(int i=1; i<=n; ++i) {
int up = arr[i].c + m, tmans = 0, p = i;
for(int j=19; j>=0; --j) {
if(dp[p][j] and arr[dp[p][j]].d < up) {
tmans += (1ll<<j); p = dp[p][j];
}
}
ans[arr[i].id] = tmans+2;
}
for(int i=1; i<=n; ++i) {
cout << ans[i] << " ";
}
return 0;
}