結果
問題 | No.2643 Many Range Sums Problems |
ユーザー |
![]() |
提出日時 | 2024-02-19 23:22:44 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 208 ms / 8,000 ms |
コード長 | 2,280 bytes |
コンパイル時間 | 1,301 ms |
コンパイル使用メモリ | 137,104 KB |
最終ジャッジ日時 | 2025-02-19 17:46:30 |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 34 |
ソースコード
#include <string.h> #include <algorithm> #include <array> #include <bitset> #include <cassert> #include <cfloat> #include <climits> #include <cmath> #include <complex> #include <ctime> #include <deque> #include <fstream> #include <functional> #include <iomanip> #include <iostream> #include <iterator> #include <list> #include <map> #include <memory> #include <queue> #include <random> #include <set> #include <stack> #include <string> #include <unordered_map> #include <unordered_set> #include <utility> #include <vector> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N,K; cin >> N >> K; vector<int>R(N); vector<long long>X(N); for(int i = 0; i < N; i++) { cin >> R[i] >> X[i]; } for(int i = 0; i < N; i++) { vector<long long>tmp1(N),tmp2(N+1); vector<int>f(N),f2(N+1); for(int j = N-1; j >= 0; j--) { if(i == j) { f[j] = 1; tmp2[j] = tmp2[j+1]; f2[j] = f2[j+1]+1; } else { long long sum1 = tmp2[j+1]-tmp2[R[j]]; int sum2 = f2[j+1]-f2[R[j]]; tmp1[j] = X[j]-sum1; if(sum2 == 1) { f[j] = -1; } if(sum2 == -1) { f[j] = 1; } tmp2[j] = tmp2[j+1]+tmp1[j]; f2[j] = f2[j+1]+f[j]; } } bool ok = true; long long mi = 0,mx = K; for(int j = 0; j < N; j++) { if(f[j] == 0) { if(0 <= tmp1[j] && tmp1[j] <= K) { //ok } else { ok = false; } } if(f[j] == 1) { if(tmp1[j] < 0) { mi = max(mi,-tmp1[j]); } mx = min(mx,K-tmp1[j]); } if(f[j] == -1) { if(tmp1[j] > K) { mi = max(mi,tmp1[j]-K); } mx = min(mx,tmp1[j]); } } if(mi <= mx && ok) { cout << "Yes" << "\n"; } else { cout << "No" << "\n"; } } }