#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int t,x,y,q,a[N],tree[N],m[N],s[N],n;
int build(int i,int l,int r)
{
if(l==r) return tree[i]=a[l];
int mid=l+r>>1;
return tree[i]=min(build(i*2,l,mid),build(i*2+1,mid+1,r));
}
int query(int i,int l,int r)
{
if(y<l||r<x) return 0x3f3f3f3f;
if(l>=x&&r<=y) return tree[i];
int mid=l+r>>1;
return min(query(i*2,l,mid),query(i*2+1,mid+1,r));\
}
int modify(int i,int l,int r)
{
if(l==x&&r==x) return tree[i]=y;
if(x<l||x>r) return tree[i];
int mid=l+r>>1;
return tree[i]=min(modify(i*2,l,mid),modify(i*2+1,mid+1,r));
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>t;
for(int i=1;i<=t;i++){
cin>>m[i];
s[i]=s[i-1]+m[i];
for(int j=1;j<=m[i];j++)
cin>>a[++n];
}
memset(tree,0x3f,sizeof tree);
build(1,1,n);
cin>>q;
while(q--)
{
int op;
cin>>op;
if(op==1)
{
int i,j;
cin>>i>>j>>y;
x=s[i-1]+j;
modify(1, 1, n);
}
else
{
int i;
cin>>i;
x=1;
y=s[i];
cout<<query(1,1,n)<<endl;
}
}
}
线段树(更新点)
最新推荐文章于 2024-10-06 10:17:48 发布