#include #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") using namespace std; using std::cout; using std::cin; using std::endl; using ll=long long; using ld=long double; ll ILL=2167167167167167167; const int INF=2100000000; const int mod=998244353; #define rep(i,a,b) for (ll i=a;i using _pq = priority_queue, greater>; template ll LB(vector &v,T a){return lower_bound(v.begin(),v.end(),a)-v.begin();} template ll UB(vector &v,T a){return upper_bound(v.begin(),v.end(),a)-v.begin();} template bool chmin(T &a,const T &b){if(a>b){a=b;return 1;}else return 0;} template bool chmax(T &a,const T &b){if(a void So(vector &v) {sort(v.begin(),v.end());} template void Sore(vector &v) {sort(v.begin(),v.end(),[](T x,T y){return x>y;});} void yneos(bool a){if(a) cout<<"Yes\n"; else cout<<"No\n";} template void vec_out(vector &p){for(int i=0;i<(int)(p.size());i++){if(i) cout<<" ";cout< T vec_min(vector &a){assert(!a.empty());T ans=a[0];for(auto &x:a) chmin(ans,x);return ans;} template T vec_max(vector &a){assert(!a.empty());T ans=a[0];for(auto &x:a) chmax(ans,x);return ans;} template T vec_sum(vector &a){assert(!a.empty());T ans=a[0]-a[0];for(auto &x:a) ans+=x;return ans;} int pop_count(long long a){int res=0;while(a){res+=(a&1),a>>=1;}return res;} namespace po167{ struct UFtree_yuki_2311 { using _F=int; int _n; vector val1,val2; vector> q; int component; UFtree_yuki_2311(int n):_n(n),val1(n),val2(n),q(n),component(n),par(n){ for(int i=0;i par; }; } void solve(); // oddloop int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t=1; //cin>>t; rep(i,0,t) solve(); } void solve(){ int N; cin>>N; vector A(N); rep(i,0,N) cin>>A[i]; ll T; cin>>T; vector ev(T,vector(3)); rep(i,0,T){ rep(j,0,3) cin>>ev[i][j]; ev[i][1]--; if(ev[i][0]==1) ev[i][2]--; } vector> H(T); ll Q; cin>>Q; vector ans(Q); vector S(Q),I(Q); rep(i,0,Q){ cin>>S[i]>>I[i]; S[i]--,I[i]--; if(S[i]!=-1) H[S[i]].push_back(i); } // 2 and 3 { vector large(N); int B=444; rep(i,0,T){ if(ev[i][0]==1) large[ev[i][1]]++,large[ev[i][2]]++; } rep(i,0,N) if(large[i] v1(N),v2(N); vector> g1(N),g2(N); rep(i,0,T){ if(ev[i][0]==1){ if(large[ev[i][2]]){ g2[ev[i][1]].push_back(ev[i][2]); } else{ g1[ev[i][2]].push_back(ev[i][1]); } if(large[ev[i][1]]){ g2[ev[i][2]].push_back(ev[i][1]); } else{ g1[ev[i][1]].push_back(ev[i][2]); } } if(ev[i][0]==2){ v2[ev[i][1]]+=ev[i][2]; } if(ev[i][0]==3){ v2[ev[i][1]]+=ev[i][2]; if(large[ev[i][1]]){ v1[ev[i][1]]+=ev[i][2]; } else{ for(auto x:g1[ev[i][1]]){ v2[x]+=ev[i][2]; } } } for(auto x:H[i]){ ans[x]+=v2[I[x]]; for(auto y:g2[I[x]]) ans[x]+=v1[y]; } } } // 4 { po167::UFtree_yuki_2311 uft(N); rep(i,0,T){ if(ev[i][0]==1) uft.unite(ev[i][1],ev[i][2]); if(ev[i][0]==4) uft.fall(ev[i][1],ev[i][2]); for(auto x:H[i]){ ans[x]+=uft.calc(I[x]); } } } rep(i,0,Q){ cout<