# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
990226 | duzinho039 | Sum Zero (RMI20_sumzero) | C++14 | 489 ms | 57680 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
using vi = vector<int>;
using vvi = vector<vi>;
using ii = pair<int, int>;
using vii = vector<ii>;
vi c;
vii queries;
int n, q;
void read() {
cin >> n;
c.resize(n);
for(int &x: c) cin >> x;
cin >> q;
queries.resize(q);
for(auto &[l, r]: queries) cin >> l >> r;
}
void solve() {
map<int, int> where;
vvi anc(n, vi(15, -100));
int currsum = 0;
int prev = -100;
for(int i = 0; i < n; ++i) {
currsum += c[i];
if(where.find(currsum) != where.end()) {
prev = max(prev, where[currsum]);
}
if(currsum == 0) {
prev = max(prev, -1);
}
anc[i][0] = prev;
for(int b = 1; b < 15; ++b) {
if(anc[i][b - 1] <= -1) {
break;
}
anc[i][b] = anc[anc[i][b - 1]][b - 1];
}
where[currsum] = i;
}
for(auto [l, r]: queries) {
l--;
r--;
int ans = 0;
for(int b = 14; b >= 0; --b) {
if(r == -1) break;
int nr = anc[r][b];
if(nr >= l - 1) {
r = nr;
ans |= 1 << b;
}
}
cout << ans << '\n';
}
}
int main() {
read();
solve();
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |