ソースコード
#include <cstdio>
#include <vector>
#include <algorithm>
typedef long long int ll;
using namespace std;
ll N, T, Q;
ll A[100010], D[100010];
vector<ll> G, _G;
int main() {
scanf("%lld%lld%lld", &N, &T, &Q);
A[0] = -1000000000000000010;
D[0] = -1;
G.push_back(-2000000000000000000);
_G.push_back(2000000000000000000);
for (int i = 1; i <= N; i++) {
scanf("%lld%lld", &A[i], &D[i]);
if (D[i] == 2) D[i] = -1;
if (D[i - 1] == 1 && D[i] == -1) {
G.push_back((A[i - 1] + A[i]) / 2);
_G.push_back((-A[i - 1] - A[i]) / 2);
}
}
G.push_back(2000000000000000000);
_G.push_back(-2000000000000000000);
reverse(_G.begin(), _G.end());
for (int i = 0; i < Q; i++) {
ll X, J;
scanf("%lld", &X);
ll L = A[X] + T*D[X];
if (D[X] == 1) {
J = *lower_bound(G.begin(), G.end(), A[X]);
if (L > J)printf("%lld\n", J);
else printf("%lld\n", L);
}
else {
J = -*lower_bound(_G.begin(), _G.end(), -A[X]);
if (L < J)printf("%lld\n", J);
else printf("%lld\n", L);
}
}
}