제출 #858482

#제출 시각아이디문제언어결과실행 시간메모리
858482Requiem원숭이와 사과 나무 (IZhO12_apple)C++17
100 / 100
309 ms240524 KiB
#include<bits/stdc++.h> #define pb push_back #define fast ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr); #define MOD 1000000007 #define INF 1e18 #define fi first #define se second #define FOR(i,a,b) for(int i=a;i<=b;i++) #define FORD(i,a,b) for(int i=a;i>=b;i--) #define sz(a) ((int)(a).size()) #define endl '\n' #define pi 3.14159265359 #define TASKNAME "apple" template<typename T> bool maximize(T &res, const T &val) { if (res < val){ res = val; return true; }; return false; } template<typename T> bool minimize(T &res, const T &val) { if (res > val){ res = val; return true; }; return false; } using namespace std; typedef pair<int,int> ii; typedef pair<int,ii> iii; typedef vector<int> vi; const int MAXN = 100002; struct SparseSegmentTree{ int sum,lazy,l,r,toleft,toright; SparseSegmentTree(): sum(0), lazy(0), l(0), r(0), toleft(0), toright(0){} SparseSegmentTree(int l,int r): sum(0), lazy(0), l(l), r(r), toleft(0), toright(0){} }; int cnt = 0; SparseSegmentTree st[MAXN*102]; void push(int node){ if (st[node].lazy==1){ int mid = (st[node].l + st[node].r) / 2; if (st[node].toleft == 0) { st[node].toleft=++cnt; st[cnt] = SparseSegmentTree(st[node].l,mid); } if (st[node].toright == 0) { st[node].toright=++cnt; st[cnt] = SparseSegmentTree(mid+1,st[node].r); } st[node].sum = st[node].r - st[node].l +1; st[st[node].toleft].lazy = st[st[node].toright].lazy = 1;; st[node].lazy = 0; } } void upd(int node,int u,int v){ push(node); if (st[node].l > v or st[node].r < u) return; if (st[node].l >= u and st[node].r <=v) { st[node].lazy = 1; push(node); return; } int mid = (st[node].l + st[node].r) / 2; if (st[node].toleft == 0) { st[node].toleft=++cnt; st[cnt] = SparseSegmentTree(st[node].l,mid); } if (st[node].toright == 0) { st[node].toright=++cnt; st[cnt] = SparseSegmentTree(mid+1,st[node].r); } upd(st[node].toleft,u,v); upd(st[node].toright,u,v); st[node].sum = st[st[node].toleft].sum + st[st[node].toright].sum; } int get(int node,int u,int v){ push(node); if (st[node].l > v or st[node].r < u) return 0; if (st[node].l >= u and st[node].r <=v) return st[node].sum; int mid = (st[node].l + st[node].r) / 2; if (st[node].toleft == 0) { st[node].toleft=++cnt; st[cnt] = SparseSegmentTree(st[node].l,mid); } if (st[node].toright == 0) { st[node].toright=++cnt; st[cnt] = SparseSegmentTree(mid+1,st[node].r); } return get(st[node].toleft,u,v) + get(st[node].toright,u,v); } int n; main() { fast; // freopen(TASKNAME".inp","r",stdin); // freopen(TASKNAME".out","w",stdout); int n; cin>>n; int c = 0; cnt = 1; st[1] = SparseSegmentTree(1,1e9); for(int i=1;i<=n;i++){ int type,x,y; cin>>type>>x>>y; if (type==1) { c = get(1,x+c,y+c); cout<<c<<endl; } else{ upd(1,x+c,y+c); } } }

컴파일 시 표준 에러 (stderr) 메시지

apple.cpp:82:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   82 | main()
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...