# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
483558 | macktvz | trapezoid (balkan11_trapezoid) | C++17 | 127 ms | 5028 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include <cmath>
using namespace std;
struct Segment {
long long ways,num;
};
const int mod = 30013;
Segment join(Segment A, Segment B) {
Segment ret;
if (A.num > B.num) return A;
if (B.num > A.num) return B;
ret.num = A.num;
ret.ways = (A.ways+B.ways)%mod;
return ret;
}
Segment id;
template<class T> struct Seg { // comb(ID,b) = b
const T ID = id; T comb(T a, T b) { return join(a,b); }
int n; vector<T> seg;
void init(int _n) { n = _n; seg.assign(2*n,ID); }
void pull(int p) { seg[p] = comb(seg[2*p],seg[2*p+1]); }
void upd(int p, T val) { // set val at position p
seg[p += n] = val; for (p /= 2; p; p /= 2) pull(p); }
T query(int l, int r) { // min on interval [l, r]
T ra = ID, rb = ID;
for (l += n, r += n+1; l < r; l /= 2, r /= 2) {
if (l&1) ra = comb(ra,seg[l++]);
if (r&1) rb = comb(seg[--r],rb);
}
return comb(ra,rb);
}
};
// keep track of min trap that intersects with curr trap
Seg<Segment> lis;
struct Trapezoid {
int a,b,c,d;
const bool operator<(const Trapezoid& o) const {
if(b < o.a & d < o.c) return 1;
return a < o.a;
}
};
vector<Trapezoid> traps;
bool intersect(int i, int j) {
return (traps[i].b > traps[j].a || traps[i].d > traps[j].c);
}
int main() {
int n; cin >> n;
Trapezoid t;
for(int i = 0; i < n; i++) {
cin >> t.a >> t.b >> t.c >> t.d;
traps.push_back(t);
}
lis.init(n+1);
sort(begin(traps),end(traps));
Segment f;
f.num = 1;
f.ways = 1;
lis.upd(1,f);
int ind = 0;
Segment ret;
ret.num = 1;
ret.ways = 1;
Segment res;
for(int i = 1; i < n; i++) {
while (ind != i && !intersect(ind,i)) ind++;
res = lis.query(1,ind);
res.num++;
if (res.ways == 0) res.ways = 1;
ret = join(ret,res);
lis.upd(i+1,res);
}
cout << ret.num << " " << ret.ways << endl;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |