#include using namespace std; using ll = long long; template struct BIT { private: vector bit; int N; T _sum(int r){ r++; T res = 0; while(r > 0) res += bit[r-1], r -= r & -r; return res; } public: BIT (int n){ N = n; bit.resize(N);} BIT (vector &a) : BIT(a.size()) { for (int i=0; i> N >> M >> K; vector v(K+1); //スタンプiがどこにあるか? for (int i=0; i<=K; i++) cin >> v[i]; vector dist(N+1, vector(N+1, 1e18)); //dist[i][j] = 頂点iから頂点jまでの最短距離 for (int i=0; i> a >> b >> c; dist[a][b] = min(c, dist[a][b]); dist[b][a] = min(c, dist[b][a]); } for (int k=1; k<=N; k++){ for (int i=1; i<=N; i++){ for (int j=1; j<=N; j++){ dist[i][j] = min(dist[i][j], dist[i][k]+dist[k][j]); } } } BIT bit(K); //スタンプiからスタンプi+1までの最短距離の総和 for (int i=0; i> q; while(q--){ cin >> t >> x >> y; if (t == 1){ v[x] = y; if (x > 0){ bit.change(x-1, dist[v[x-1]][v[x]]); } if (x < K){ bit.change(x, dist[v[x]][v[x+1]]); } } else{ cout << bit.sum(x, y-1) << endl; } } return 0; }