思路:
按照等级排序,维护同等级最大评分,每个等级的总评分至少比其第前一个等级的最大评分大1分
吐槽:
思路不难,但坑好多,感觉全踩了一遍
坑:(按解决先后排序
要维护同等级的最大值,并且与前一等级的排序,不能只根据排完序后前一个的总评分进行判断
储存 -1 所在的位置,代替遍历查找,用空间换时间
题目要求按输入顺序输出各个比赛的评分,不要进行两次排序,不要格外用上离散化,充分利用好下标
不要用pair<int,vector<int> > 类型的数组排序,用pair对应起等级和下标就行
更新前驱不受是否需要填值影响
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
bool cmp(pair<int,int> a,pair<int,int> b){
return a.first<b.first;
} //pair<int,int>装<等级,下标>,将等级小的排在前面
int n,m,k;
int x; int cc;
void solve(){
cin>>n>>m>>k;
pair&