蓝桥杯-整数删除

整数删除

思路:数组模拟链表+优先队列

注意:求和需要开 longlong 不然会超时

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using PII = pair<ll,ll>;
const int N = 5e5+10;
//双向数组维护节点的顺序
ll e[N];
int l[N],r[N];
int n,k,i;
//优先队列确定元素最小值和位置
void deletex(int i){
    e[l[i]]+=e[i];
    e[r[i]]+=e[i];
    r[l[i]]=r[i];
    l[r[i]]=l[i];
}
void solve( ){
    cin>>n>>k;
    priority_queue<PII,vector<PII>,greater<PII>> pq;
    r[0]=1;
    l[n+1]=n;
    for(int i=1;i<=n;i++){
        ll res;cin>>res;
        pq.push({res,i});
        e[i] = res;
        l[i]=i-1;
        r[i]=i+1;
    }
    while(k--){
        auto [res,i]= pq.top();
        pq.pop();
        if(e[i]!=res){
            pq.push({e[i],i});
            k++;
            continue;
        }
        deletex(i);
    }
    for(int i=r[0];i<=n;i=r[i]){
        cout<<e[i]<<" ";
    }
}


int main( ){
    cin.tie(nullptr)->sync_with_stdio(false);
    int T=1;
    while(T--){
        solve();
    }
    return 0;
}

没取消输入输出同步:

取消输入输出同步:

相关推荐
iAkuya7 分钟前
(leetcode)力扣100 26环状链表2(双指针)
算法·leetcode·链表
sin_hielo9 分钟前
leetcode 2402(双堆模拟,小根堆)
数据结构·算法·leetcode
weixin_4617694017 分钟前
3. 无重复字符的最长子串
c++·算法·滑动窗口·最长字串
Morwit19 分钟前
【力扣hot100】 312. 戳气球(区间dp)
c++·算法·leetcode
CoovallyAIHub28 分钟前
摄像头如何“看懂”你的手势?手势识别实现新人机交互
深度学习·算法·计算机视觉
我命由我1234528 分钟前
Photoshop - Photoshop 工具栏(45)历史记录艺术画笔工具
学习·ui·职场和发展·求职招聘·职场发展·学习方法·photoshop
妮妮喔妮38 分钟前
前端字节面试大纲
前端·面试·职场和发展
Q741_14740 分钟前
C++ 栈 模拟 力扣 394. 字符串解码 每日一题 题解
c++·算法·leetcode·模拟·
AI科技星1 小时前
张祥前统一场论:空间位移条数概念深度解析
数据结构·人工智能·经验分享·算法·计算机视觉
Wuliwuliii1 小时前
闵可夫斯基和、需存储的最小状态集
c++·算法·动态规划·闵可夫斯基和