AtCoder Beginner Contest 217

[ABC217E] Sorting Queries

维护一个空序列 A ,有 Q 次查询:

  1. 在 A 的最后插入一个元素一个元素 x
  2. 输出 A 的第一个元素并删除这个元素
  3. 将这个序列排序

 

用 deque 和 multiset 维护,复杂度应该是$O(\space log(\space n \space)\space)$的 

虽然操作三要把deque全部元素丢到multiset里, 但是最多只是两倍常数而已

#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;

//复杂度应该是O(log(n))的,虽然操作三要把deque全部元素丢到multiset里
//但是最多只是两倍常数而已


int main(){
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    int T = 1; cin >> T;
    multiset<int> s; deque<int> q;
    while(T--){
        int op; cin >> op;
        if(op == 1){
            int x; cin >> x;
            q.push_back(x);
        }else if(op == 2){
            if((int)s.size()){
                cout << *s.begin() << endl;
                s.erase(s.begin());
            }else{
                cout << q.front() << endl;
                q.pop_front();
            }
        }else{
            while((int)q.size()){
                s.insert(q.front());
                q.pop_front();
            }
        }
    }
    return 0;
}
View Code

[ABC217G] Groups

题面翻译

对于$\forall k \in [1,n]$,求出把 [1,n] 中的 n 个整数分为非空的 k 组, 每组任意两个数模 m 不同余的方案数。

两个方案不同,当且仅当存在两个数,一种方案中它们在同一组, 但在另一种方案中,它们不同组。

998244353 取模。

$2 \le M \le N \le 5000$

 


dp合集 - zhujio - 博客园 (cnblogs.com)


 

 

posted @ 2023-09-11 17:58  zhujio  阅读(11)  评论(0编辑  收藏  举报