Submission #534911

# Submission time Handle Problem Language Result Execution time Memory
534911 2022-03-09T06:33:38 Z Evang trapezoid (balkan11_trapezoid) C++17
2 / 100
138 ms 11076 KB
#include <bits/extc++.h>
using namespace std;
using namespace __gnu_pbds;

#ifdef _DEBUG
#define dout(x) clog << "Line " << __LINE__ << ": " << #x << "=" << (x) << el
#else
#define dout(x)
#endif

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define uid(a,b) uniform_int_distribution<int>(a,b)(rng)

#define ins insert
#define ssize(x) (int((x).size()))
#define bs(args...) binary_search(args)
#define lb(args...) lower_bound(args)
#define ub(args...) upper_bound(args)
#define all(x) (x).begin(),(x).end()
#define mp(a, b) make_pair(a, b)
#define mt(args...) make_tuple(args)
#define pb push_back
#define eb emplace_back
#define ff first
#define ss second
#define die exit(0)

template<typename T>
using vc = vector<T>;
template<typename T>
using uset = unordered_set<T>;
template<typename A, typename B>
using umap = unordered_map<A, B>;
template<typename T, typename Comp>
using pq = std::priority_queue<T, vc<T>, Comp>;
template<typename T>
using maxpq = pq<T, less<T>>;
template<typename T>
using minpq = pq<T, greater<T>>;
template<typename T>
using oset = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

using db = double;
using ld = long double;
using ll = long long;
using ull = unsigned long long;
using pi = pair<int, int>;
using pll = pair<ll, ll>;
using vi = vc<int>;
using vll = vc<ll>;
using vpi = vc<pi>;
using vpll = vc<pll>;
using str = string;

constexpr char el = '\n';
constexpr char sp = ' ';
constexpr int inf = 0x3f3f3f3f;
constexpr ll llinf = 0x3f3f3f3f3f3f3f3fLL;
// ---------------------------------------------------------------------


const int N = 1e5+5;
const int MM = 4e5+5;
const int mod = 30013;
int n, dp[N], dp2[N];
struct evan {
    int a, b, c, d;
} a[N];
struct node {
    int max = 0, cnt = 0;
} seg[MM];
vi qs[N];
map<pi, pi> mp;

void pull(int i){
    if(seg[2*i].max==seg[2*i+1].max){
        seg[i].max = seg[2*i].max;
        seg[i].cnt = (seg[2*i].cnt + seg[2*i+1].cnt)%mod;
    }else if(seg[2*i].max<seg[2*i+1].max)
        seg[i] = seg[2*i+1];
    else
        seg[i] = seg[2*i];
}

void upd(int i, int x, int y){
    // i is 0-indexed
    i += 2*n;
    if(x==seg[i].max)
        seg[i].cnt += y;
    else if(x>seg[i].max){
        seg[i].max = x;
        seg[i].cnt = y;
    }

    for(i /= 2; i > 0; i /= 2)
        pull(i);
}

pi qry(int r){
    // r is 0-indexed
    r += 2*n;
    int l = 2*n;
    int car = 0, cnt = 0;
    while(l<=r){
        if(l&1){
            if(seg[l].max>car){
                car = seg[l].max;
                cnt = seg[l].cnt;
            }else if(seg[l].max==car)
                cnt = (cnt+seg[l].cnt)%mod;
            ++l;
        }
        if(r&1^1){
            if(seg[r].max>car){
                car = seg[r].max;
                cnt = seg[r].cnt;
            }else if(seg[r].max==car)
                cnt = (cnt+seg[r].cnt)%mod;
            --r;
        }
        l /= 2; r /= 2;
    }
    return mp(car, cnt);
}

void unik(vi &v){
    sort(all(v));
    vi u{v[0]};
    for(int i = 1; i < ssize(v); ++i)
        if(v[i]^v[i-1])
            u.pb(v[i]);
    swap(u, v);
}

signed main() {
    ios::sync_with_stdio(0); cin.tie(0);
    cout << fixed; clog << fixed; clog << unitbuf;
#ifdef _DEBUG
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    freopen("debug.txt", "w", stderr);
#else
    //freopen(".in", "r", stdin);
    //freopen(".out", "w", stdout);
#endif

    cin >> n;
    vi cct, ccb;
    for(int i = 1; i <= n; ++i){
        cin >> a[i].a >> a[i].b >> a[i].c >> a[i].d;
        cct.pb(a[i].a);
        cct.pb(a[i].b);
        ccb.pb(a[i].c);
        ccb.pb(a[i].d);
    }

    unik(cct);
    unik(ccb);
    for(int i = 1; i <= n; ++i){
        a[i].a = lb(all(cct), a[i].a)-cct.begin();
        a[i].b = lb(all(cct), a[i].b)-cct.begin();
        a[i].c = lb(all(ccb), a[i].c)-ccb.begin();
        a[i].d = lb(all(ccb), a[i].d)-ccb.begin();
    }
    sort(a+1, a+1+n, [](evan x, evan y){
        return x.b < y.b;
    });

#ifdef _DEBUG
    clog << "Line " << __LINE__ << ":\n";
    for(int i = 1; i <= n; ++i)
        clog << a[i].a << sp << a[i].b << sp << a[i].c << sp << a[i].d << el;
    clog << el;
#endif

//    int p = 0;
//    for(int i = 1; i <= n; ++i){
//        while(a[p+1].b<a[i].a)
//            ++p;
//
//        qs[p].pb(a[i].c);
//    }

    int p = 0;
    for(int i = 1; i <= n; ++i){
        while(a[p+1].b<a[i].a) {
            ++p;
            upd(a[p].d, dp[p], dp2[p]);
        }

        auto[car, cnt] = qry(a[i].c);
        if(dp[i-1]>car+1){
            dp[i] = 1;
            dp2[i] = 1;
//            dp[i] = dp[i-1];
//            dp2[i] = dp2[i-1];
        }else{
            dp[i] = car+1;
            dp2[i] = max(1, cnt);
        }
    }

    auto[car, cnt] = qry(2*n-1);
    cout << car << sp << cnt << el;

#ifdef _DEBUG
    clog << "Line " << __LINE__ << ":\n";
    for(int i = 0; i <= n; ++i)
        clog << dp[i] << sp << dp2[i] << el;
    clog << el;
#endif
}

Compilation message

trapezoid.cpp: In function 'pi qry(int)':
trapezoid.cpp:113:13: warning: suggest parentheses around arithmetic in operand of '^' [-Wparentheses]
  113 |         if(r&1^1){
      |            ~^~
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 2636 KB Output isn't correct
2 Incorrect 2 ms 2636 KB Output isn't correct
3 Partially correct 2 ms 2636 KB Partially correct
4 Incorrect 2 ms 2764 KB Output isn't correct
5 Incorrect 4 ms 2820 KB Output isn't correct
6 Incorrect 5 ms 2988 KB Output isn't correct
7 Incorrect 5 ms 3144 KB Output isn't correct
8 Incorrect 8 ms 3276 KB Output isn't correct
9 Incorrect 14 ms 3796 KB Output isn't correct
10 Incorrect 32 ms 4864 KB Output isn't correct
11 Incorrect 33 ms 5228 KB Output isn't correct
12 Incorrect 70 ms 7256 KB Output isn't correct
13 Incorrect 84 ms 7968 KB Output isn't correct
14 Incorrect 99 ms 9176 KB Output isn't correct
15 Incorrect 100 ms 9472 KB Output isn't correct
16 Incorrect 133 ms 9796 KB Output isn't correct
17 Incorrect 109 ms 10168 KB Output isn't correct
18 Incorrect 103 ms 10452 KB Output isn't correct
19 Incorrect 126 ms 10588 KB Output isn't correct
20 Incorrect 138 ms 11076 KB Output isn't correct