#include <bits/stdc++.h>
using namespace std;
const int N = 4e5 + 5;
int sTree[N];
struct SegmentTree{
void Build(int node, int l, int r, vector<int>&v){
if(l == r){
sTree[node] = v[l];
}
else{
int mid = (l + r) / 2;
Build(node * 2, l, mid, v);
Build(node * 2 + 1, mid + 1, r, v);
sTree[node] = min(sTree[node * 2], sTree[node * 2 + 1]);
}
}
void Update(int node, int l, int r, int pos, int val){
if(l == r){
sTree[node] = val;
}
else{
int mid = (l + r) / 2;
if(pos <= mid){
Update(node * 2, l, mid, pos, val);
}
else{
Update(node * 2 + 1, mid + 1, r, pos, val);
}
sTree[node] = min(sTree[node * 2], sTree[node * 2 + 1]);
}
}
int Query1(int node, int l, int r, int ql, int qr, int w){
int mid = (l + r) / 2;
if(ql <= l && r <= qr){
if(l == r){
if(sTree[node] < w)return l;
else return -1;
}
else{
if(sTree[node * 2] < w)return Query1(node * 2, l, mid, ql, qr, w);
return Query1(node * 2 + 1, mid + 1, r, ql, qr, w);
}
}
if(ql > r || l > qr)return -1;
int lc = Query1(node * 2, l, mid, ql, qr, w);
if(lc == -1)return Query1(node * 2 + 1, mid + 1, r, ql, qr, w);
return lc;
}
int Query2(int node, int l, int r, int ql, int qr, int w){
int mid = (l + r) / 2;
if(ql <= l && r <= qr){
if(l == r){
if(sTree[node] < w)return l;
else return -1;
}
else{
if(sTree[node * 2 + 1] < w)return Query2(node * 2 + 1, mid + 1, r, ql, qr, w);
return Query2(node * 2, l, mid, ql, qr, w);
}
}
if(ql > r || l > qr)return -1;
int rc = Query2(node * 2 + 1, mid + 1, r, ql, qr, w);
if(rc == -1)return Query2(node * 2, l, mid, ql, qr, w);
return rc;
}
};
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
vector<int>e(n);
for(int i = 1;i < n;++i){
int u, v, w;
cin >> u >> v >> w;
e[i] = w;
}
SegmentTree tree;
tree.Build(1, 1, n - 1, e);
int q;
cin >> q;
while(q--){
int type;
cin >> type;
if(type == 1){
int b, r;
cin >> b >> r;
tree.Update(1, 1, n - 1, b, r);
}
else{
int s, w;
cin >> s >> w;
int R = tree.Query1(1, 1, n - 1, s, n - 1, w), L = tree.Query2(1, 1, n - 1, 1, s - 1, w);
if(L == -1)L = 0;
if(R == -1)R = n;
int res = R - L;
cout << res << '\n';
}
}
}
/*
5 4
1 2 1
2 3 3
3 4 2
4 5 7
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |