Submission #297207

#TimeUsernameProblemLanguageResultExecution timeMemory
297207PeppaPigEditor (BOI15_edi)C++14
100 / 100
458 ms207612 KiB
#include <bits/stdc++.h> using namespace std; const int N = 3e5+5; struct node { int val; node *l, *r; node(int val, node *l, node *r) : val(val), l(l), r(r) {} }; node* newleaf(int val) { return new node(val, NULL, NULL); } node* newpar(node *l, node *r) { return new node(min(l->val, r->val), l, r); } int n, ans[N]; node* t[N]; node* build(int l = 1, int r = n) { if(l == r) return newleaf(N); int mid = (l + r) >> 1; return newpar(build(l, mid), build(mid+1, r)); } node* update(int x, int k, node *p, int l = 1, int r = n) { if(x < l || r < x) return p; if(l == r) return newleaf(k); int mid = (l + r) >> 1; return newpar(update(x, k, p->l, l, mid), update(x, k, p->r, mid+1, r)); } int find(int x, node *p, int l = 1, int r = n) { if(l == r) return l; int mid = (l + r) >> 1; if(p->r->val < x) return find(x, p->r, mid+1, r); else return find(x, p->l, l, mid); } int main() { scanf("%d", &n); t[0] = build(); for(int i = 1, a; i <= n; i++) { scanf("%d", &a); if(a > 0) { ans[i] = a; t[i] = update(i, 0, t[i-1]); } else { int pre = find(-a, t[i-1]) - 1; ans[i] = ans[pre]; t[i] = update(i, -a, t[pre]); } printf("%d\n", ans[i]); } return 0; }

Compilation message (stderr)

edi.cpp: In function 'int main()':
edi.cpp:40:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   40 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
edi.cpp:43:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   43 |         scanf("%d", &a);
      |         ~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...