이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
//----------vahagng----------//
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
using namespace std;
// using namespace __gnu_pbds;
// template <class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#ifndef ONLINE_JUDGE
#define dbg(x) cerr << #x <<" "; print(x); cerr << endl;
#else
#define dbg(x)
#endif
void print(long long t) {cerr << t;}
void print(int t) {cerr << t;}
void print(string t) {cerr << t;}
void print(char t) {cerr << t;}
void print(double t) {cerr << t;}
void print(long double t) {cerr << t;}
void print(unsigned long long t) {cerr << t;}
template <class T, class V> void print(pair <T, V> p);
template <class T> void print(vector <T> v);
template <class T> void print(set <T> v);
template <class T, class V> void print(map <T, V> v);
template <class T> void print(multiset <T> v);
template <class T, class V> void print(T v[],V n) {cerr << "["; for(int i = 0; i < n; i++) {cerr << v[i] << " ";} cerr << "]";}
template <class T, class V> void print(pair <T, V> p) {cerr << "{"; print(p.first); cerr << ","; print(p.second); cerr << "}";}
template <class T> void print(vector <T> v) {cerr << "[ "; for (T i : v) {print(i); cerr << " ";} cerr << "]";}
template <class T> void print(set <T> v) {cerr << "[ "; for (T i : v) {print(i); cerr << " ";} cerr << "]";}
template <class T> void print(multiset <T> v) {cerr << "[ "; for (T i : v) {print(i); cerr << " ";} cerr << "]";}
template <class T, class V> void print(map <T, V> v) {cerr << "[ "; for (auto i : v) {print(i); cerr << " ";} cerr << "]";}
#define ll long long
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
#define ld long double
#define sz(v) v.size()
#define endl '\n'
const ll inf = 1e18, mod = 1e9+7, mod1 = 998244353;
void SetIO(string str = "") {
if (str != "") {
freopen((str + ".in").c_str(), "r", stdin);
freopen((str + ".out").c_str(), "w", stdout);
} else {
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
}
}
void FastIO() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
}
ll mult(ll a, ll b){
return (a*b)%mod;
}
ll add(ll a, ll b){
return (a + b)%mod;
}
ll sub(ll a, ll b){
return (a - b + mod)%mod;
}
/*
4 2 4
2 3
0 2
0 3
0 6
0 7
*/
// expected output
/*
2
3
1
*/
ll power(ll a, ll b){
ll res = 1;
while(b--){
res *= a;
}
return res;
}
/*
5
1 2
3 1
2 1
4 2
5 1
*/
const int N = 3e5 + 10, M = N;
ll n, l[N], r[N], dp[N];
vector<ll>adj[N];
struct segtree{
vector<ll>stree;
int size = 1;
void init(){
while(size < n) size <<= 1;
stree.assign(4*size, 0);
}
void upd(int i, ll val, int x, int lx, int rx){
if(rx - lx == 1){
stree[x] = val;
return;
}
int m = (lx + rx)/2;
if(i < m) upd(i, val, 2*x+1, lx, m);
else upd(i, val, 2*x+2, m, rx);
stree[x] = max(stree[2*x+1], stree[2*x+2]);
}
void upd(int i, ll val){
upd(i, val, 0, 0, size);
}
ll qry(int l, int r, int x, int lx, int rx){
if(lx >= l && rx <= r) return stree[x];
if(lx >= r || rx <= l) return 0;
int m = (lx + rx)/2;
return max(qry(l, r, 2*x+1, lx, m), qry(l, r, 2*x+2, m, rx));
}
ll qry(int l, int r){
return qry(l, r, 0, 0, size);
}
} st;
void solve(int tc){
cin >> n;
for(int i = 0; i < n; i++){
cin >> l[i] >> r[i];
}
st.init();
for(int i = 0; i < n; i++){
for(auto j : adj[i]){
st.upd(j, dp[j]);
}
dp[i] = st.qry(0, i - l[i]) + 1;
if(i + r[i] + 1 < n) adj[i+r[i]+1].push_back(i);
}
ll mx = 0;
for(int i = 0; i < n; i++){
mx = max(mx, dp[i]);
}
cout << mx << endl;
}
void precalc(){
}
int main() {
// SetIO("");
FastIO();
int test_case = 1;
// cin >> test_case;
precalc();
int cnt = 1;
while (test_case--){
solve(cnt++);
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
Main.cpp: In function 'void SetIO(std::string)':
Main.cpp:47:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
47 | freopen((str + ".in").c_str(), "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:48:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
48 | freopen((str + ".out").c_str(), "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:50:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
50 | freopen("input.txt", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:51:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
51 | freopen("output.txt", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |