제출 #439360

#제출 시각아이디문제언어결과실행 시간메모리
439360NintsiChkhaidzeFountain (eJOI20_fountain)C++14
0 / 100
67 ms6596 KiB
#include <iostream> #include <queue> #define pb push_back using namespace std; const int N = 100005; int c[N],d[N],D[25][N],V[25][N],cntparent[N]; bool f[N]; deque <int> dq; vector <int> v[N]; void dfs(int x,int par){ f[x] = 1; for (int w = 1; w <= 18; w++){ D[w][x] = D[w - 1][D[w - 1][x]]; V[w][x] = V[w - 1][D[w - 1][x]] + V[w - 1][x] - c[D[w - 1][x]]; } for (int j=0;j<v[x].size();j++){ int to = v[x][j]; if (to == par) continue; dfs(to,x); } } int get(int x,int val){ if (!f[x]) { if (c[x] >= val) return x; return 0; } int ans = -1,X = x,q = 0; for (int j = 18; j >= 0; j--){ if (D[j][x] == 0) continue; if (V[j][x] <= val) { q = 1; val -= V[j][x]; x = D[0][D[j][x]]; continue; } ans = D[j][x]; } if (!q && c[x] >= val) ans = x; if (ans == -1) return 0; return ans; } int main() { int n,q; cin>>n>>q; for (int i = 1; i <= n; i++) cin>>d[i]>>c[i]; dq.pb(d[n]); for (int i = n - 1; i >= 1; i--){ while (dq.size() && d[dq.back()] <= d[i]) dq.pop_back(); if (dq.size()){ int idx = dq.back(); D[0][i] = idx,V[0][i] = c[idx] + c[i]; cntparent[i]++; v[idx].pb(i); } dq.push_back(i); } for (int i = 1; i <= n; i++){ if (cntparent[i] || !v[i].size()) continue; dfs(i,i); } while(q--){ int ind,val; cin>>ind>>val; cout<<get(ind,val)<<"\n"; } }

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

fountain.cpp: In function 'void dfs(int, int)':
fountain.cpp:18:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   18 |   for (int j=0;j<v[x].size();j++){
      |                ~^~~~~~~~~~~~
fountain.cpp: In function 'int get(int, int)':
fountain.cpp:30:16: warning: unused variable 'X' [-Wunused-variable]
   30 |   int ans = -1,X = x,q = 0;
      |                ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...