Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
32806 | 林芳菲 | 【J】计算器 | C++ | 运行超时 | 0 | 1000 MS | 1828 KB | 1525 | 2024-10-01 21:31:54 |
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; int n, q, cnt; int a[100010]; long long s[100010]; struct node { int op, x; } ; node t[100010]; int main() { cin >> n >> q; for (int i = 1; i <= n; i++) cin >> t[i].op >> t[i].x; for (int i = 1; i <= n; i++) { s[i] = s[i - 1]; if (t[i].op == 2 && t[i].x != 1) a[++cnt] = i; if (t[i].op == 1) s[i] += t[i].x; } while (q--) { int l, r; cin >> l >> r; int p = l; long long ans = 0; bool flag = false; while (p <= r) { int pos = lower_bound(a + 1, a + cnt + 1, p) - a; if (pos > r) { pos = r; ans += s[pos] - s[p - 1]; if (t[r].op == 2) ans *= t[r].x; if (ans < 0 || ans >= 1e18) flag = true; break; } ans += s[pos] - s[p - 1]; if (t[r].op == 2) ans *= t[r].x; if (ans < 0 || ans >= 1e18) { flag = true; break; } ans *= t[pos].x; if (ans < 0 || ans >= 1e18) { flag = true; break; } p = pos + 1; } if (flag) cout << "-1" << endl; else cout << ans << endl; } return 0; }