# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
653518 | amukkalir | 원숭이와 사과 나무 (IZhO12_apple) | C++17 | 329 ms | 157260 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "bits/stdc++.h"
using namespace std;
const int nax = 1e7;
int tree[4*nax+5];
bool lazy[4*nax+5];
int n;
void cek (int idx, int l, int r) {
if(!lazy[idx]) return;
tree[idx] = r-l+1;
if(r!=l) {
lazy[idx<<1] = 1;
lazy[idx<<1|1] = 1;
}
lazy[idx]=0;
}
void upd (int fr, int to, int idx = 1, int l = 1, int r = nax) {
cek (idx, l, r) ;
if (r < fr || l > to) return;
else if (fr <= l && r <= to) {
lazy[idx]=1;
cek(idx,l,r);
} else {
int m = (l+r) >> 1;
upd(fr, to, idx<<1, l, m);
upd(fr, to, idx<<1|1, m+1, r);
tree[idx] = tree[idx<<1] + tree[idx<<1|1];
}
}
long long get (int fr, int to, int idx = 1, int l=1, int r=nax) {
cek(idx, l, r);
if (r < fr || l > to) return 0;
else if (fr <= l && r <= to) return tree[idx];
else {
int m = (l+r) >> 1;
return get(fr, to, idx<<1, l, m) + get (fr, to, idx<<1|1, m+1, r);
}
}
signed main () {
int m; cin >> m;
long long c = 0;
while (m--) {
long long tp, l, r;
cin >> tp >> l >> r;
l += c; r += c;
if(tp == 1) {
long long res = get(l,r);
cout << res << "\n";
c = res;
} else {
upd(l,r);
}
}
}
/*
*/
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |