呼叫莱德(求助)
  • 板块灌水区
  • 楼主一咕咕一
  • 当前回复12
  • 已保存回复13
  • 发布时间2024/9/5 22:35
  • 上次更新2024/9/6 14:03:49
查看原帖
呼叫莱德(求助)
772815
一咕咕一楼主2024/9/5 22:35

案发地点:P7870 「Wdoi-4」兔已着陆

案件问题:样例没过,输出负数。

问题代码:

#include <bits/stdc++.h>
#define sum(l, r) ((l + r) * (r - l + 1) / 2)
#define cnt(l, r) (r - l + 1)
using namespace std;
class Node
{
public:
    long long l, r;
};
stack<Node> s;
long long n;
int main()
{
    // freopen(".in", "r", stdin);
    // freopen(".out", "w", stdout);
    cin >> n;
    for (long long i = 1; i <= n; i++)
    {
        long long op;
        cin >> op;
        if (op == 1)
        {
            long long l, r;
            cin >> l >> r;
            s.push({l, r});
        }
        else
        {
            long long k;
            cin >> k;
            long long ans = 0;
            while (cnt(s.top().l, s.top().r) < k)
                k -= cnt(s.top().l, s.top().r), ans += sum(s.top().l, s.top().r), s.pop();
            long long l = s.top().l;
            long long r = s.top().r;
            ans += sum(r - k + 1, r);
            s.pop();
            s.push({l, r - k});
            cout << ans << endl;
        }
    }
    system("pause");
    return 0;
}
2024/9/5 22:35
加载中...