제출 #397907

#제출 시각아이디문제언어결과실행 시간메모리
397907qwerasdfzxcl단층 (JOI16_ho_t5)C++14
100 / 100
257 ms13596 KiB
#include <bits/stdc++.h> typedef long long ll; using namespace std; struct Seg{ ll lazy[400400]; int sz; void update(int l, int r, ll val){ for(l += sz, r += sz;l<r;l>>=1, r>>=1){ if (l&1) lazy[l++] += val; if (r&1) lazy[--r] += val; } } ll query(int x){ ll ret = lazy[x+=sz]; for (x>>=1;x;x>>=1) ret += lazy[x]; return ret; } }tree1, tree2; struct Query{ int x, d; ll l; }query[200200]; int main(){ int n, q; scanf("%d %d", &n, &q); for (int i=0;i<q;i++) scanf("%d %d %lld", &query[i].x, &query[i].d, &query[i].l); tree1.sz = n, tree2.sz = n; for (int i=q-1;i>=0;i--){ if (query[i].d==1){ int l = 0, r = n, idx=0; while(l!=r){ int m = (l+r)/2; ll tmp = tree1.query(m)*2-m; if (tmp>-query[i].x){ idx = m+1; l = m+1; } else r = m; } //printf("1 %d %d\n", i, idx); tree2.update(0, idx, -query[i].l); } else{ int l = 0, r = n, idx = n; while(l!=r){ int m = (l+r)/2; ll tmp = tree2.query(m)*2+m; if (tmp>=query[i].x){ idx = m; r = m; } else l = m+1; } //printf("2 %d %d\n", i, idx); tree1.update(idx, n, -query[i].l); } } for (int i=0;i<n;i++){ ll ans = tree1.query(i) + tree2.query(i); printf("%lld\n", -ans); } return 0; }

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

2016_ho_t5.cpp: In function 'int main()':
2016_ho_t5.cpp:27:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   27 |     scanf("%d %d", &n, &q);
      |     ~~~~~^~~~~~~~~~~~~~~~~
2016_ho_t5.cpp:28:32: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   28 |     for (int i=0;i<q;i++) scanf("%d %d %lld", &query[i].x, &query[i].d, &query[i].l);
      |                           ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...