OI能用多线程吗
  • 板块灌水区
  • 楼主lyb_qhd
  • 当前回复4
  • 已保存回复4
  • 发布时间2025/1/28 11:03
  • 上次更新2025/1/28 19:27:58
查看原帖
OI能用多线程吗
1476288
lyb_qhd楼主2025/1/28 11:03

https://www.luogu.com.cn/problem/P1177

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
#define N 0x1000005
#define up(i,l,r) for(int i=l,E##i=r;i<=E##i;++i)
ll n;
ll a[N], t[N];
void srt( ll, ll );
int main() {
	cin >> n;
	up( i, 1, n ) cin >> a[i];
	srt( 1, n );
	up( i, 1, n ) cout << a[i] << " ";
}
void srt( ll l, ll r ) {
	//边界条件
	if ( l >= r ) return;
	//递归
	ll m = ( l + r ) >> 1;
	thread lsrt( srt, l, m );
	thread rsrt( srt, m + 1, r );
	lsrt.join();
	rsrt.join();
	//合并
	ll li = l, ri = m + 1, p = l;
	while ( li <= m and ri <= r )
		if( a[li] <= a[ri] ) t[p++] = a[li++];
		else t[p++] = a[ri++];
	up( i, li, m ) t[p++] = a[i];	//左边剩余
	up( i, ri, r ) t[p++] = a[i];	//右边剩余
	//迁移回原数组
	up( i, l, r ) a[i] = t[i];
}

https://www.luogu.com.cn/record/200755455

2025/1/28 11:03
加载中...