stl stack做法求条,玄关
查看原帖
stl stack做法求条,玄关
629944
wangzhaohan2910楼主2025/6/30 13:17
#include <bits/extc++.h>
#define int long long
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
typedef short i16;
typedef unsigned short u16;
// typedef int i32;
typedef unsigned u32;
typedef long long i64;
typedef unsigned long long u64;
typedef long isize;
typedef unsigned long usize;
typedef float f32;
typedef double f64;
typedef long double f128;
stack<pair<int, int>> s;

signed main()
{
    int n;
    cin >> n;
    while (n--)
    {
        int o;
        cin >> o;
        if (o & 1)
        {
            int l, r;
            cin >> l >> r;
            s.emplace(l, r);
        }
        else
        {
            int k, u{};
            cin >> k;
            while (k)
                if (auto [l,r]{s.top()}; r - l + 1 <= k)
                    k -= r - l + 1, s.pop(), u += (l + r) * (r - l + 1) / 2;
                else
                    cout << u + (r * 2 - k + 1) * k / 2 << ' ',
                    s.top().second -= k,
                    k = 0;
        }
    }
    return 0;
}

其中,第三十八行 auto [l,r]{s.top()} 是指把 first 赋给 l,把 second 赋给 r ,然后进行后面的判断。

2025/6/30 13:17
加载中...