NiffrG 2022-08-23 20:34 采纳率: 0%
浏览 10
已结题

ODT运行时错误应如何修正?

如下代吗在输入样例如下时发生运行时错误,然后单步调试运行至case语句内部以后跳出cpu窗口和<move.h>。求指出错误。。

1
5
5 3 4 2 1
2 5 2 0

上述样例的解释如下: 进行一组测试,数列长度为5,下一行为数列的元素。 左端点为2,右端点为5,执行操作2(assign),用来推平的数为0


```c++
#include <bits/stdc++.h>
using namespace std;
typedef long long int64;

inline int64 fpow(int64 base, int64 ex, int64 mod) {
    base %= mod;
    int64 res = 1;
    while (ex > 0) {
        if (ex & 1) 
            res = res * base % mod;
        base = base * base % mod;
        ex >>= 1;
    }
    return res;
}

/* classes, templates and namespaces */
template<typename any>struct odt { // Old Driver Tree (Chtholly Tree)
    //CORE CODE
    struct odt_node {
        int l, r;
        mutable any data;
        odt_node(int _l, int _r = -1, any _data = 0):l(_l), r(_r), data(_data) {}
        bool operator < (const odt_node &t) const {
            return l < t.l;
        }
    };
    std::set<odt_node> s;
    auto insert(int l, int r = -1, any k = 0) {
        return s.emplace(l, r, k);
    }
    auto begin() {
        return s.begin();
    }
    auto end() {
        return s.end();
    }
    auto split(int pos) {
        auto it = s.lower_bound(pos);
        if(it != s.end() and it->l == pos)return it;
        it--;
        int l = it->l, r = it->r;
        any k = it->data;
        s.erase(it);
        insert(l, pos-1, k);
        return insert(pos, r, k).first;
    }

    //BASE OPERATIONS
    virtual inline int64 add(int l, int r, int delta) {
        int64 res = 0;
        auto it_r = split(r + 1);
        auto it_l = split(l);
        for(; it_l != it_r; ++it_l)
            it_l -> data += delta;
        return res;
    }
    auto assign(int l,int r,any k) {
        auto it_r = split(r + 1), it_l = split(l);
        s.erase(it_l, it_r);
        return insert(l, r, k).first;
    }
    virtual inline int64 kth(int l, int r, int k) {
        auto it_r = split(r + 1);
        auto it_l = split(l);
        vector<pair<int64,int> > vec;
        vec.clear();
        for (; it_l != it_r; ++it_l)
            vec.push_back({it_l->data, it_l->r - it_l->l+1});
        sort(vec.begin(), vec.end());
        for (auto p:vec) {
            k = k - p.second;
            if (k <= 0) return p.first;
        }
        return -1;//k is out of the range
    }
    virtual inline int64 query(int l, int r, int ex, int64 mod) {
        int64 res = 0;
        auto it_r = split(r + 1);
        auto it_l = split(l);
        for(; it_l != it_r; ++it_l)
            res = (res + (it_l->r - it_l->l+1) * fpow(it_l->data, ex, mod) % mod) % mod;
        return res;
    }

    //PERFORMANCE
    inline auto output() {
       for(auto it = s.begin(); it != s.end(); it++) {
            int range = (int)(it->r - it->l+1);
            while(range--)
                cout << (it -> data);
       }
    }

    inline auto performance(int l, int r) {
        auto it_r = split(r + 1);
        auto it_l = split(l);
        for (; it_l != it_r; ++it_l) {
            // Perform Operations here
        }
    }
};

/* AREA LINE */

int T, arr[100000];
int n, lbound, rbound, operat;
odt<int> ODT;

int main() {
    cin >> T >> n;
    for(int i = 0; i < n; i++)
        cin >> arr[i];
    while(T--) {
        cin >> lbound >> rbound >> operat;
        if(lbound > rbound)
            lbound ^= rbound ^= lbound ^= rbound;
        int x;
        switch(operat) {
            case 1: {
                //FI >> x;
                cin >> x;
                ODT.add(lbound, rbound, x);
                //ODT.output();
                putchar('\n');
                break;
            }
            case 2: {
                cin >> x;
                ODT.assign(lbound, rbound, x);
                ODT.output();
                putchar('\n');
                break;
            }
            case 3: {
                cin >> x;
                cout << ODT.kth(lbound, rbound, x);
                putchar('\n');
                break;
            }
            case 4: {
                cin >> x;
                cout << ODT.query(lbound, rbound, x, (int64)(1e9+7));
                putchar('\n');
                break;
            }
        }
    }
    return 0;
}

```

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-08-23 20:52
    关注

    lbound ^= rbound ^= lbound ^= rbound;
    这段是要干啥?

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月9日
  • 创建了问题 8月23日

悬赏问题

  • ¥15 office打开卡退(新电脑重装office系统后)
  • ¥300 FLUENT 火箭发动机燃烧EDC仿真
  • ¥15 【Hadoop 问题】Hadoop编译所遇问题hadoop-common: make failed with error code 2
  • ¥15 vb6.0+webbrowser无法加载某个网页求解
  • ¥15 RPA财务机器人采购付款流程
  • ¥15 计算机图形多边形及三次样条曲线绘制
  • ¥15 根据protues画的图用keil写程序
  • ¥200 如何使用postGis实现最短领规划?
  • ¥15 pyinstaller打包错误
  • ¥20 cesm的气溶胶排放文件