문제
https://codeforces.com/problemset/problem/1485/B
걸린 시간
- 실패
풀이
C++
#include <bits/stdc++.h>
#define INF 1e9
#define all(c) c.begin(), c.end()
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, q, k;
cin >> n >> q >> k;
vector<int> a(n+2);
for(int i = 1; i < n+1; i++){
cin >> a[i];
}
a[0] = 1;
a[n+1] = k;
vector<ll> left(n+1), right(n+1);
for(int i = 1; i < n+1; i++){
left[i] = (a[i+1]-1)-1;
right[i] = (k-a[i-1])-1;
}
vector<ll> m(n+1, 0);
for(int i = 2; i <= n-1; i++){
m[i] = (a[i+1]-a[i-1]-1)-1;
}
for(int i = 3; i <= n-1; i++){
m[i] += m[i-1];
}
int l, r;
for(int i = 0; i < q; i++){
cin >> l >> r;
if(l == r){
cout << k-1 << "\n";
}
else if(l < r){
int s = l+1;
int e = r-1;
cout << left[l] + right[r] + (m[e]-m[s-1]) << "\n";
}
}
return 0;
}
l == r 인 경우의 처리를 해 주지 않아서 틀린 문제이다. 문제의 예제 입력에서는 연속된 3개의 a 중간값이었기 때문에 문제가 없었다. 출제자가 이 부분을 노린걸까?
디시 ps 갤러리에 질문글을 올려서 겨우 반례를 찾았다..
참고
'Codeforces' 카테고리의 다른 글
Codeforces #1506B Partial Replacement (0) | 2021.03.27 |
---|---|
Codeforces #1499B Binary Removals (0) | 2021.03.27 |
Codeforces Round #710 (Div. 3) A, C (0) | 2021.03.27 |
Codeforces #1476B Inflation (0) | 2021.03.24 |
Codeforces #1476A K-divisible Sum (0) | 2021.03.24 |
댓글