P4155国旗计划全wa,样例未过,求调,悬关
查看原帖
P4155国旗计划全wa,样例未过,求调,悬关
607952
ZHANGGUIZHI楼主2024/10/11 18:47
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+3;
int n,m,t,logg[N*2];
struct node{int num,x,y;}a[N*2];
bool cmp(node a,node b){
  if(a.x==b.x)return a.y<b.y;
  return a.x<b.x;
}
int f[N*2][20],res[N];
void pre(){
  for(int i=1,j=1;i<=n*2;i++){
    while(j<=n*2&&a[j].x<=a[i].y)j++;
    f[i][0]=j-1;
  }
  for(int j=1;j<=t;j++)
    for(int i=1;i<=2*n;i++)
      f[i][j]=f[f[i][j-1]][j-1];
}
void ask(int s){
  int end=a[s].x+m,ans=0,p=s;
  for(int j=t;j>=0;j--)
    if(a[f[s][j]].y<end&&f[s][j]){
      s=f[s][j];
      ans+=(1<<j);
    }
  res[a[p].num]=ans;
}
signed main(){
  ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
  cin>>n>>m;
  for(int i=2;i<=n*2;i++)logg[i]=logg[i>>1]+1;t=logg[n];
  for(int i=1;i<=n;i++){
    cin>>a[i].x>>a[i].y;a[i].num=i;
    if(a[i].x>=a[i].y)a[i].y+=m;
    a[i+n].x=a[i].x+m,a[i+n].y=a[i].y+m;a[i+n].num=a[i].num;
  }
  sort(a+1,a+1+n,cmp);pre();
  for(int i=1;i<=n;i++)ask(i);
  for(int i=1;i<=n;i++)cout<<res[i]<<' ';
  cout<<'\n';
  return 0;
}

2024/10/11 18:47
加载中...