C - Large Queue

C - Large Queue_第1张图片

 C - Large Queue_第2张图片

 地址:C - Large Queue

#include 
using namespace std;
const int N = 1e5 + 10;
void solve()
{
    int n;
    cin>>n;
    queue> q;
    while(n--)
    {
        int t;
        cin>>t;
        if(t==1)
        {
            long long c,x;
            cin>>c>>x;
            q.push({x,c});
        } else {
            long long k;
            cin>>k;
            long long sum=0;
            while(k>0)
            {
                auto [val,cnt] = q.front();
                if(cnt<=k)
                {
                    sum+=val*cnt;
                    k-=cnt;
                    q.pop();
                } else {
                    sum+=val*k;
                    q.front().second-=k;
                    k=0;
                }
            }
            cout<> t;
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    while (t--)
    {
        solve();
    }
    return 0;
}

详细解释:

    queue> q;
使用队列q,每个元素是一个pair

x:表示值

count:这个值出现的次数(批量增加)

q.push({x,c});

添加c个值为x的元素到队尾

由于不能真的插入个元素(会爆内存),所以直接压入一个pair{x,c}表示批量添加。

            while(k > 0) {
                auto [val, cnt] = q.front();
循环删除,知道删够k个

每次查看队首的val和他的cnt(重复次数)

你可能感兴趣的:(c语言,开发语言)