佬们能帮我看一下为什么不过吗/(ㄒoㄒ)/~~
思路:用multimap做哈希表映射,然后排序,再取出前k小的数进行加法/删除。
#include <iostream>
#include <vector>
#include<map>
#include <algorithm>
using namespace std;
const int N = 1e8+2;
int n,k;
typedef long long LL;
int main()
{
cin>>n>>k;
multimap<LL, int> nums;
vector<LL> vec(n,0);
int number=0;
for(int i=0;i<n;i++)
{
cin>>number;
nums.insert({number, i}); // 插入键值对
vec[i] = number;
}
//先给每个数排序
while (k > 0 && !nums.empty())
{
k--;
// 找到最小值及其索引
auto it = nums.begin();
LL value = it->first;
int index = it->second;
nums.erase(it); // 删除最小值
int p = index;int q = index;
//cout<<value<<" "<<index<<endl;
while(p-1 >=0 && vec[p-1] == -2) p--;
if(p-1 >=0) vec[p-1] += vec[index];
while(q+1 <n && vec[q+1] == -2) q++;
if(q+1 <n) vec[q+1] += vec[index];
vec[index] = -2;
/* for(int i=0;i<n;i++)
{
//if(vec[i] != -2) cout<<vec[i]<<" ";
cout<<vec[i]<<" ";`
}*/
//cout<<endl;
}
for(int i=0;i<n;i++)
{
if(vec[i] != -2) cout<<vec[i]<<" ";
//cout<<vec[i]<<" ";
}
}