Submission #382981

#TimeUsernameProblemLanguageResultExecution timeMemory
382981milleniumEeeeBridges (APIO19_bridges)C++17
16 / 100
1138 ms7988 KiB
#include <bits/stdc++.h> #define fastInp ios_base::sync_with_stdio(0); cin.tie(0); #define pii pair<int, int> #define fr first #define sc second #define mk make_pair #define pb push_back #define szof(s) (int)s.size() #define all(s) s.begin(), s.end() using namespace std; const int MAXN = (int)1e5 + 5; const int INF = (int)2e9 + 7; const int L = 20; vector <pii> g[MAXN]; int edge[MAXN]; int n, m, q; struct Query { int type, x, y; Query (int type_, int x_, int y_) { type = type_; x = x_; y = y_; } Query () { } }; Query qr[MAXN]; int tree[MAXN * 4]; void upd(int pos, int val, int v = 1, int tl = 1, int tr = MAXN) { if (tl == tr) { tree[v] = val; return; } int mid = (tl + tr) >> 1; if (pos <= mid) { upd(pos, val, v + v, tl, mid); } else { upd(pos, val, v + v + 1, mid + 1, tr); } tree[v] = min(tree[v + v], tree[v + v + 1]); } int get(int l, int r, int v = 1, int tl = 1, int tr = MAXN) { if (l > tr || tl > r) { return INF; } if (l <= tl && tr <= r) { return tree[v]; } int mid = (tl + tr) >> 1; return min(get(l, r, v + v, tl, mid), get(l, r, v + v + 1, mid + 1, tr)); } signed main() { fastInp; fill(tree, tree + MAXN * 4, INF); cin >> n >> m; for (int i = 1; i <= m; i++) { int u, v, val; cin >> u >> v >> val; edge[i] = val; g[u].pb({v, i}); g[v].pb({u, i}); } for (int i = 1; i <= m; i++) { upd(i, edge[i]); } cin >> q; for (int i = 1; i <= q; i++) { int type; cin >> type; if (type == 1) { int pos, new_val; cin >> pos >> new_val; edge[pos] = new_val; upd(pos, new_val); } else { int vertex, x; cin >> vertex >> x; int l, r; l = r = vertex; if (vertex < n && edge[vertex] >= x) { int lft = vertex, rgt = m + 1; while (rgt - lft > 1) { int mid = (lft + rgt) >> 1; if (get(vertex, mid) >= x) { lft = mid; } else { rgt = mid; } } r = lft + 1; } if (vertex > 1 && edge[vertex - 1] >= x) { int lft = 0, rgt = vertex - 1; while (rgt - lft > 1) { int mid = (lft + rgt) >> 1; if (get(mid, vertex - 1) >= x) { rgt = mid; } else { lft = mid; } } l = rgt; } cout << r - l + 1 << endl; } } } /* 2 1 1 2 50 4 1 1 32 2 1 40 2 1 1 2 2 38 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...