Submission #1207113

#TimeUsernameProblemLanguageResultExecution timeMemory
1207113smathewihFountain (eJOI20_fountain)C++17
100 / 100
178 ms22672 KiB
#include<bits/stdc++.h> // task dependent stuff #define STANDARD 1 #define INTERACTIVE 0 #define OUTPUTONLY 2 #define TASKTYPE STANDARD #if TASKTYPE > 0 #define endl '\n' #endif // common functions/members #define X first #define Y second #define pb push_back #define mkp make_pair // some basic ahh for macros #define FORT for(int tii=0;tii<t;tii++) using namespace std; const int mod = 1000000007; const int huge = 1000000000; const int big = 20000000; typedef long long ll; typedef std::pair<int, int> pii; int n, q; int d[200007]; int c[200007]; int up[200007][20]; vector<int> con[200007]; void presum(int i, int par) { c[i] += c[par]; up[i][0] = par; for (int l = 1; l < 20; l++) { up[i][l] = up[up[i][l - 1]][l - 1]; } for (int j = 0; j < con[i].size(); j++) { presum(con[i][j], i); } } // dont forget to set task type! int main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); cin >> n >> q; for (int i = 0; i < n; i++) cin >> d[i] >> c[i]; priority_queue<pii, vector<pii>, greater<pii>> minp; for (int i = 0; i < n; i++) { if (!minp.empty()) { while (minp.top().X < d[i]) { con[i].pb(minp.top().Y); minp.pop(); if (minp.empty()) break; } } minp.push(mkp(d[i], i)); } while (!minp.empty()) { con[n].pb(minp.top().Y); minp.pop(); } c[n] = 0; presum(n, n); int a, b; for (int i = 0; i < q; i++) { cin >> a >> b; a--; // a is the STUPID fountain bowl thing and b is WATEH IN LITEHRSY for (int l = 19; l != -1; l--) { int dif = c[a] - c[up[a][l]]; if (dif < b) { b -= dif; a = up[a][l]; } } a++; if (a == (n + 1)) cout << 0 << endl; else cout << a << endl; } /*cout << "TIS THE GRAPH\n"; for (int i = 0; i <= n; i++) { cout << i + 1 << " :"; for (int j = 0; j < con[i].size(); j++) { cout << " " << con[i][j] + 1; } cout << endl; } cout << "MY DAD LEFT ME (PARENTS)\n"; for (int i = 0; i <= n; i++) { cout << i + 1 << " :"; for (int j = 0; j < 20; j++) { cout << " " << up[i][j] + 1; } cout << endl; }*/ return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...