제출 #650712

#제출 시각아이디문제언어결과실행 시간메모리
650712sofija6Fountain (eJOI20_fountain)C++14
100 / 100
1095 ms50204 KiB
#include <bits/stdc++.h> #define ll long long #define MAXN 100010 #define llinf 1000000000000 #define logn 20 using namespace std; ll d[MAXN],c[MAXN],sum[MAXN][logn],up[MAXN][logn]; stack<pair<ll,ll> > s; vector<ll> G[MAXN]; vector<bool> V(MAXN); void DFS(ll i,ll par) { V[i]=true; up[i][0]=par; sum[i][0]=(i!=par)*c[par]; for (ll j=1;j<logn;j++) { up[i][j]=up[up[i][j-1]][j-1]; sum[i][j]=sum[i][j-1]+sum[up[i][j-1]][j-1]; } for (ll next : G[i]) { if (!V[next]) DFS(next,i); } } pair<ll,ll> Check(ll u,ll x) { ll cur=c[u]; for (ll i=logn-1;i>=0;i--) { if ((1<<i)<=x) { x-=(1<<i); cur+=sum[u][i]; u=up[u][i]; } } return {cur,u}; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll n,q,r,v; cin >> n >> q; for (ll i=1;i<=n;i++) cin >> d[i] >> c[i]; d[n+1]=llinf; c[n+1]=llinf; s.push({llinf,n+1}); for (ll i=n;i>=1;i--) { while (s.top().first<=d[i]) s.pop(); G[i].push_back(s.top().second); G[s.top().second].push_back(i); s.push({d[i],i}); } for (ll i=n+1;i>=1;i--) { if (!V[i]) DFS(i,i); } while (q--) { cin >> r >> v; if (v<=c[r]) { cout << r << "\n"; continue; } ll l=1,rr=n+1,mid,ans; while (l<=rr) { mid=(l+rr)/2; auto p=Check(r,mid); if (p.first>=v) { ans=p.second; rr=mid-1; } else l=mid+1; } cout << ans%(n+1) << "\n"; } return 0; }

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

fountain.cpp: In function 'int main()':
fountain.cpp:85:25: warning: 'ans' may be used uninitialized in this function [-Wmaybe-uninitialized]
   85 |         cout << ans%(n+1) << "\n";
      |                         ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...