Submission #1312534

#TimeUsernameProblemLanguageResultExecution timeMemory
1312534baktrrFountain (eJOI20_fountain)C++20
100 / 100
283 ms35940 KiB
/** III U U N N DDDD EEEEE RRRR SSSS TTTTT AAAAA N N DDDD I TTTTT N N OOO W W I U U NN N D D E R R S T A A NN N D D I T NN N O O W W I U U N N N D D EEEE RRRR SSSS T AAAAA N N N D D I T N N N O O W W W I U U N NN D D E R R S T A A N NN D D I T N NN O O WW WW III UUUUU N N DDDD EEEEE R R SSSS T A A N N DDDD I T N N OOO W W **/ //18.09.25 #include <bits/stdc++.h> // #pragma optimize("g", on) // #pragma GCC optimize ("inline") // #pragma GCC optimize ("Ofast") // #pragma GCC optimize ("unroint-loops") // #pragma GCC optimize ("03") // #pragma GCC target ("sse,sse2,sse3,ssse3,sse4,popcnt,abm,avx2,mmx,fma,avx,tune=native") // #include <ext/pb_ds/assoc_container.hpp> // #include <ext/pb_ds/tree_policy.hpp> using namespace std; // using namespace __gnu_pbds; #define F first #define ent '\n' #define S second #define no "NO\n" #define in insert #define yes "YES\n" #define pb push_back #define int long long #define sz(w) w.size() #define pii pair} <int, int> #define all(w) w.begin(), w.end() #define rall(w) w.rbegin(), w.rend() #define Yeah ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); const int MOD = 998244353, M = 4e5 + 7, N = 1e5 + 7, INF = 2e18, inf = 1e9 + 7, LOG = 20 , mod = 1e9 + 7 ; // find_by_order idx and get s[idx], idx from 0 // order_of_key cnt of x > // template <typename T> // using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>; // mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int up[N][LOG] , sum[N][LOG] ; void accepted() { int n , m ; cin >> n >> m ; int a[n + 1] , b[n + 1] ; for(int i = 1 ; i <= n ; i++) { cin >> a[i] >> b[i] ; } stack <int> st ; int par[n + 1] = {} ; for(int i = n ; i >= 1 ; i--) { while(!st.empty() && a[st.top()] <= a[i]) { st.pop() ; } if(!st.empty()) { par[i] = st.top() ; } st.push(i) ; up[i][0] = par[i] ; sum[i][0] = b[par[i]] ; } for(int k = 1 ; k < LOG ; k++) { for(int v = 1 ; v <= n ; v++) { if(up[up[v][k - 1]][k - 1]) { up[v][k] = up[up[v][k - 1]][k - 1] ; sum[v][k] = sum[up[v][k - 1]][k - 1] + sum[v][k - 1] ; } else { up[v][k] = 0 ; sum[v][k] = sum[v][k - 1] ; } } } for(int i = 1 ; i <= m ; i++) { int v , x ; cin >> v >> x ; if(x <= b[v]) { cout << v << ent ; continue ; } x -= b[v] ; for(int k = LOG - 1 ; k >= 0 ; k--) { if(up[v][k] && sum[v][k] < x) { x -= sum[v][k] ; v = up[v][k] ; } } cout << par[v] << ent ; } } signed main() { Yeah // PLS NeverGiveUp // freopen("cowpatibility.in", "r", stdin) ; // freopen("cowpatibility.out", "w", stdout) ; int T = 1 ; // cin >> T ; while(T--) { accepted() ; cout << endl ; } } /** **/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...