悬关,60pts Wa求调
查看原帖
悬关,60pts Wa求调
929151
xxr___楼主2025/2/6 20:44
#include<bits/stdc++.h>
using namespace std;
//8:45过大样例 
#define int long long
#define up(i,l,r) for(int i=(l);i<=(r);++i)
const int N=2e5+5;
int n,m;
vector<int> vec[N];
struct node_{
	int s,t,id;
}p[N];
bool operator<(const node_ &x,const node_ &y){
	return x.t<y.t;
}
struct seg_t{
	struct node{
		int mn,lz;
	}t[N<<2];
	inline int ls(int u){return u<<1;}
	inline int rs(int u){return u<<1|1;}
	inline void push_up(int u){
		t[u].mn=min(t[ls(u)].mn,t[rs(u)].mn);
	}
	inline void update(int u,int l,int r,int x,int k){
		if(l==r){
			t[u].mn=k;
			return;
		}
		push_up(u);
		int mid=(l+r)>>1;
		if(x<=mid) update(ls(u),l,mid,x,k);
		else update(rs(u),mid+1,r,x,k);
		push_up(u);
	}
	inline int query(int u,int l,int r,int ql,int qr){
		if(ql<=l&&qr>=r){
			return t[u].mn;
		}
		int mid=(l+r)>>1;
		push_up(u);
		int mnn=2e9;
		if(ql<=mid) mnn=min(mnn,query(ls(u),l,mid,ql,qr));
		if(qr>mid) mnn=min(mnn,query(rs(u),mid+1,r,ql,qr));
		return mnn;
	}
}bit; 
int32_t main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	cin>>n>>m;
	up(i,1,n){
		cin>>p[i].s>>p[i].t;p[i].id=i;
	}
	sort(p+1,p+n+1);
	up(i,1,n){
		int l=1,r=m,ans=0;
		while(l<=r){
			int mid=(l+r)>>1;
			if(bit.query(1,1,m,1,mid)<=p[i].t){
				r=mid-1;ans=mid;
			}else{
				l=mid+1;
			}
		}
		bit.update(1,1,m,ans,p[i].t+p[i].s);
		vec[ans].push_back(p[i].id);
	} 
	up(i,1,m){
		cout<<vec[i].size()<<' ';
		sort(vec[i].begin(),vec[i].end());
		for(auto it:vec[i]){
			cout<<it<<' ';
		}
		cout<<'\n';
	}
	return 0;
}
//tomxi
2025/2/6 20:44
加载中...