sort

vector用法

将b[i]里的每个数在b[i]内进行快排

vector<int>b[5211314];
for (int i = 1; i <= pos[n]; ++ i) { 
    sort(b[i].begin(), b[i].end());
}

结构体+cmp用法

以lift为第一关键字,right为第二关键字,time为第三关键字进行的升序排列

struct ASK {
	int lift, right, time;
}ask[5211314]; 

inline bool cmp(ASK a, ASK b) {
	if (a.lift > b.lift) return false;
	else if (a.right > b.right) return false;
	else if (a.time > b.time) return false;
	return true;
} 
//返回值为假则交换a,b的位置
//返回值为真则保留a,b的位置

sort(ask + 1, ask + 1 + ask_num, cmp); 

但是不知道为什么(别问怎么知道的,亲身经历呜呜呜),上一种方法常数很大,会导致一些题目TLE,而下面的方法则会快很多
详情可见Luogu P1903 [国家集训队] 数颜色 / 维护队列

struct ASK {
	int lift, right, time;
}ask[5211314]; 

inline bool cmp(const ASK &a, const ASK &b) {
	if (a.lift != b.lift) return a.lift < b.lift;
	if (a.right != b.right) return a.right < b.right;
	return a.time < b.time;
}
//返回值为假则交换a,b的位置
//返回值为真则保留a,b的位置

sort(ask + 1, ask + 1 + ask_num, cmp); 
posted @ 2023-05-22 19:48  觉清风  阅读(14)  评论(0编辑  收藏  举报