首页 > 其他分享 >abc217E 带排序的查询

abc217E 带排序的查询

时间:2024-03-09 20:55:36浏览次数:22  
标签:abc217E int cin 查询 队列 -- 排序 op

题面:初始时有个空序列A,接下来有Q组操作,每个操作的格式如下:

  • 1 x,将x追加到A的末尾。
  • 2,输出A开头的元素值,并移除。请求时保证A非空。
  • 3,对A中元素从小到大排序。

范围:Q<=2E5; x<=1E9

思路:用一个队列来维护还没有排序的元素,再用一个优先队列来维护已排序的元素。由于每次只能追加到末尾,优先队列里的元素一定在队列的前面。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,b) for(int i=a; i<=b; i++)
#define per(i,a,b) for(int i=b; i>=a; i--)

void solve() {
    int Q;
    cin >> Q;
    queue<int> q;
    priority_queue<int> pq;
    while (Q--) {
        int op, x;
        cin >> op;
        if (op == 1) {
            cin >> x;
            q.push(x);
        } else if (op == 2) {
            if (pq.empty()) {
                cout << q.front() << "\n";
                q.pop();
            } else {
                cout << -pq.top() << "\n";
                pq.pop();
            }
        } else {
            while (!q.empty()) {
                pq.push(-q.front());
                q.pop();
            }
        }
    }
}

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    int t = 1;
    while (t--) solve();
    return 0;
}

标签:abc217E,int,cin,查询,队列,--,排序,op
From: https://www.cnblogs.com/chenfy27/p/18063282

相关文章

  • Mysql之查询语句
    前言:Mysql中查询语句是日常使用最频繁和复杂的语句,Mysql查询有单表查询和多表连接查询,以下通过案例来熟悉Mysql的查询语句。一、单表查询现有hellodb数据库和students等表mysql>SHOWDATABASES;+--------------------+|Database|+--------------------+|i......
  • 【力扣】子集II(回溯法)(排序函数的一种隐藏用法?)
    题目描述可以套回溯模版的题,但是在写的过程中发现,如果数组中有多个相同元素分散存在的话,就会有一些子集无法得到像这里的1,4,4,如果对数组从左到右枚举的话是无论如何都得不到的。对这样的数组使用排序函数后,造成的效果就是相同的元素都堆在了一起,这样就能正确地得到所有子集......
  • MYSQL学习笔记22: 多表查询
    多表查询单表查询查询emp表select*fromemp;查询dept表select*fromdept;笛卡尔积(全组合)#emp表有4条记录,dept表有6条记录#笛卡尔积有4*6=24条记录select*fromemp,dept;消除无效的笛卡尔积(emp和dept通过dept_id连接)select*fromemp,deptw......
  • 冒泡排序时间复杂度分析
    冒泡排序(升序)时间复杂度分析原理:通过从前往后遍历两两对比,当前一个数大于后一个数,则交换位置,最大的数可以遍历到最右侧不断从后缩小数组范围(end--),当end到第一个元素时停止voidSwap(int*a,int*b){inttmp=*b;*b=*a;*a=tmp;}voidBubbleSort(int*arr,i......
  • 快速排序
    快速排序-V1一、代码实现1.大致思路假如有一个数,这个数组自然有序假如有2个数,我们选第一个数为标准,比它小的数排它前面,比它大排后面,那么这两个数将有序。假如有3个数,我们选第一个数为标准,比它小的数排它前面,比它大排后面。假如有4个数,我们选第一个数为标准,比它小的数排它前......
  • 归并排序
    归并排序分析一、代码实现voidmerge(int*a,intlow,intmid,inthigh){int*b=newint[high-low+1];inti=low,j=mid+1,k=0;while(i<=mid&&j<=high){if(a[i]<a[j]){b[k++]=a[i++];}elseb[k++]=a......
  • Shell排序复杂度分析
    Shell排序复杂度分析1.大致思想可以把希尔排序看作是发牌员,给每人轮流发一张牌。需要给n个人发牌,每人从第二张开始分别进行插入排序,那么第一轮下来后,每人的牌就是有序的。接下来按照刚刚的发牌顺序把牌再收起来,减少人数,不断重复这个步骤,直到只剩下一个人,那么就是直接插入排序......
  • SQL mother查询语句
    题目教程网址:SQL之母基础查询select*fromstudent;selectxxx,xxxxasname,ddd,xxx*2asdouble_xxxfroma_tablewherexx>10ordd!=1andkk=9;别名,常量和运算,where,运算符(=,!=,>,<),逻辑运算(and,or,not)。模糊查询selectsomethingfroma_t......
  • 使用Tokeniser估算GPT和LLM服务的查询成本
    将LLM集成到项目所花费的成本主要是我们通过API获取LLM返回结果的成本,而这些成本通常是根据处理的令牌数量计算的。我们如何预估我们的令牌数量呢?Tokeniser包可以有效地计算文本输入中的令牌来估算这些成本。本文将介绍如何使用Tokeniser有效地预测和管理费用。大语言模型(如GPT)......
  • MYSQL学习笔记9: DQL排序查询(升降序)
    DQL排序查询select字段列表from表名orderby字段1排序方式1,字段2排序方式2;排序方式ASC升序(默认)DESC降序如果是多字段排序,第一个字段值相同,会根据第二个字段的值进行排序,以此类推按年龄降序排序select*fromworkersorderbyagedesc;......