제출 #908946

#제출 시각아이디문제언어결과실행 시간메모리
908946PlayVoltzFountain (eJOI20_fountain)C++17
100 / 100
909 ms46332 KiB
#include <iostream> #include <map> #include <vector> #include <climits> #include <stack> #include <string> #include <queue> #include <algorithm> #include <set> #include <unordered_set> #include <iostream> #include <unordered_map> #include <cmath> #include <cctype> #include <bitset> #include <iomanip> using namespace std; #define int long long #define pii pair<int, int> #define mp make_pair #define pb push_back int32_t main(){ int n, q, a, b; cin>>n>>q; stack<pii> st; vector<int> vect(n+1, LLONG_MAX/2); vector<vector<int> > twok(n+1, vector<int>(20, 0)), val(n+1, vector<int>(20, INT_MAX)); twok.resize(n+1, vector<int>(20, 0)); for (int i=1; i<=n; ++i){ cin>>a>>vect[i]; while (!st.empty()&&st.top().first<a)twok[st.top().second][0]=i, val[st.top().second][0]=vect[i], st.pop(); st.push(mp(a, i)); } for (int j=1; j<20; ++j)for (int i=1; i<=n; ++i)twok[i][j]=twok[twok[i][j-1]][j-1], val[i][j]=val[i][j-1]+val[twok[i][j-1]][j-1]; while (q--){ cin>>a>>b;b-=vect[a]; for (int i=19; i>=0; --i)if (val[a][i]<=b)b-=val[a][i], a=twok[a][i]; if (b>0)a=twok[a][0]; cout<<a<<"\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...