제출 #34867

#제출 시각아이디문제언어결과실행 시간메모리
34867szawinisDeda (COCI17_deda)C++14
140 / 140
333 ms9184 KiB
#include <bits/stdc++.h> #define endl '\n' using namespace std; const int N = 1 << 18; pair<int,int> get_range(int i) { int l = 0, r = N-1; for(int j = 31 - __builtin_clz(i) - 1; j >= 0; j--) { int mid = l+r >> 1; if(i >> j & 1) l = mid+1; else r = mid; } return make_pair(l, r); } struct query { char tp; int x, a, i; bool operator<(const query& rhs) { return x < rhs.x; } }; int n, q, t[2*N], res[N]; query qq[N]; void update(int i, int v) { for(t[i += N] = v; i > 1; i >>= 1) t[i>>1] = min(t[i], t[i^1]); } int qflow(int i, int k) { int l, r; tie(l, r) = get_range(i); while(i < N) { int mid = l+r >> 1; if(t[i<<1] <= k) { r = mid; i = i << 1; } else { l = mid+1; i = i << 1 | 1; } } return (t[i] <= k ? l : INT_MAX); } int qseg(int l, int r, int k) { int res = INT_MAX; vector<int> ls; ++r; for(l += N, r += N; l < r; l >>= 1, r >>= 1) { if(l & 1) ls.push_back(l++); if(r & 1) ls.push_back(--r); } for(int i: ls) if(t[i] <= k) res = min(qflow(i, k), res); return (res == INT_MAX ? -1 : res); } int main() { scanf("%d %d", &n, &q); fill(t+1, t+2*N, INT_MAX); for(int i = 0; i < q; i++) { scanf(" %c %d %d",&qq[i].tp,&qq[i].x,&qq[i].a); } for(int i = 0; i < q; i++) { char tp = qq[i].tp; if(tp == 'M') { update(qq[i].a, qq[i].x); } else { printf("%d\n", qseg(qq[i].a, n, qq[i].x)); } } }

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

deda.cpp: In function 'std::pair<int, int> get_range(int)':
deda.cpp:9:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   int mid = l+r >> 1;
              ^
deda.cpp: In function 'int qflow(int, int)':
deda.cpp:32:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   int mid = l+r >> 1;
              ^
deda.cpp: In function 'int main()':
deda.cpp:57:24: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d", &n, &q);
                        ^
deda.cpp:60:49: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf(" %c %d %d",&qq[i].tp,&qq[i].x,&qq[i].a);
                                                 ^
#Verdict Execution timeMemoryGrader output
Fetching results...