이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define PB push_back
#define MP make_pair
#define ALL(x) (x).begin(),(x).end()
#define SZ(x) (int((x.size())))
#define fi first
#define se second
typedef long double ld;
typedef long long ll;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef pair<ll, ll> PLL;
typedef vector<ll> VL;
typedef vector<PLL> VPL;
typedef vector<PII> VPI;
typedef tree <int, null_type, less<int> ,rb_tree_tag ,tree_order_statistics_node_update > ordered_set;
#define REP(i,a,n) for (int i = a; i < n; i++)
#define PER(i,a,n) for (int i = n-1; i >= a; i--)
#define dbb(x) cout << #x << " = " << x << "\t";
#define db(x) { dbb(x); cout << endl; }
#define db2(x,y) { dbb(x); dbb(y); cout << endl; }
#define db3(x,y,z) { dbb(x); dbb(y); dbb(z); cout << endl; }
template <typename t1, typename t2> inline bool upmax(t1 &a, t2 b) { if (a<(t1)b) { a = (t1)b; return true; } else return false; }
template <typename t1, typename t2> inline bool upmin(t1 &a, t2 b) { if (a>(t1)b) { a = (t1)b; return true; } else return false; }
template <typename T> inline bool pal(T &x){ int n = SZ(x); REP(i, 0, n / 2) { if (x[i] != x[n - i - 1]) return 0; } return 1; }
template <typename T> inline T gcd(T a, T b) { return b ? gcd(b, a%b) : a; }
template <typename T> inline T lcm(T a, T b) { return a*(b / gcd(a, b)); }
template <typename T> inline T sqr(T a) { return a*a; }
int dx[] = { 1, 0, -1, 0, 1, 1, -1, -1 };
int dy[] = { 0, 1, 0, -1, 1, -1, 1, -1 };
const int INF = 1000000404;
const ll LINF = 4000000000000000404ll;
const ll MOD = 1000000007ll;
const ld PI = acos(-1.0);
const ld EPS = 1e-9;
ll powmod(ll a, ll b) {
ll res = 1; a %= MOD; assert(b >= 0);
for (; b; b >>= 1) { if (b & 1) res = res*a%MOD; a = a*a%MOD; }return res;
}
int SQ = 404;
int timer = 0;
#define N 555
int a[N];
int b[N];
ll comb[N];
struct node{
node *l,*r;
ll val = 0;
node(){
l = r = NULL;
val = 0;
}
};
void update(node *v, int pos, ll delta, int tl = 0,int tr = INF) {
v->val += delta;
v->val %= MOD;
//db2(tl,tr);
//db(v->val);
if (tl == tr) {
return;
} else {
if (v->l == NULL) v->l = new node();
if (v->r == NULL) v->r = new node();
int tm = (tl + tr) >> 1;
if (pos <= tm) update(v->l, pos, delta, tl, tm);
else update(v->r, pos, delta, tm + 1, tr);
}
}
ll get(int r,node *v,int tl = 0,int tr = INF) {
if (v == NULL || tl > r) return 0;
if (tr <= r) return v->val;
int tm = (tl + tr) >> 1;
return (get(r, v->l , tl , tm ) + get(r, v->r , tm + 1, tr)) % MOD;
}
void solve() {
int n;
cin >> n;
node * v = new node();
REP (i, 1, n + 1) {
cin >> a[i] >> b[i];
}
ll ans = 0;
REP (i, 1, n + 1) {
PER(j, a[i], b[i] + 1) {
ll s = get(j - 1, v);
// db(s);
update(v, j, s + 1);
}
}
cout << get(INF, v) << endl;
}
int main()
{
// freopen("INPUT.in","r",stdin);
// freopen("OUTPUT.out","w",stdout);
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int t = 1;
//cin >> t;
while (t--) {
solve();
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
boat.cpp: In function 'void solve()':
boat.cpp:111:8: warning: unused variable 'ans' [-Wunused-variable]
ll ans = 0;
^~~
# | 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... |