結果
| 問題 |
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";
}
}
}
ぷら