Submission #1030852

# Submission time Handle Problem Language Result Execution time Memory
1030852 2024-07-22T10:50:05 Z Antekb Tower (JOI24_tower) C++17
25 / 100
211 ms 18480 KB
#include "bits/stdc++.h"	/** keep-include */
using namespace std;

#define rep(i, b, e) for(int i = (b); i <= (e); i++)
#define per(i, b, e) for(int i = (e); i >= (b); i--)
#define FOR(i, b, e) rep(i, b, (e) - 1)
#define SZ(x) int(x.size())
#define all(x) x.begin(), x.end()
#define pb push_back
#define mp make_pair
#define st first
#define nd second
using ll = long long;
using vi = vector<int>;
using pii = pair<int, int>;

auto &operator<<(auto &o, pair<auto, auto> p) {
	return o << "(" << p.st << ", " << p.nd << ")"; }
auto operator<<(auto &o, auto x)->decltype(end(x), o) {
	o << "{"; int i=0; for(auto e: x) o << ", " + 2*!i++ << e;
	return o << "}"; }
#ifdef LOCAL
#define deb(x...) cerr << "[" #x "]: ", [](auto...$) { \
	((cerr << $ << "; "),...) << endl; }(x)
#else
#define deb(...)
#endif

using se=pair<pair<ll, ll>, ll>;
bool from_both_sides;

void insert(set<se> &S, ll l, ll r, ll c){
    vector<se> todo;
    auto it=S.lower_bound(se(mp(mp(l, 0), 0)));
    if(it!=S.begin())it--;
    while(it!=S.end() && it->st.st<=r){
        todo.pb(*it);
        it++;
    }
    for(auto i : todo){
        ll L=i.st.st, R=i.st.nd, C=i.nd;
        if(L>r || R<l)continue;
        S.erase(i);
        if(L<l){
            S.insert(mp(mp(L, l-1), C));
        }
        if(R>r){
            S.insert(mp(mp(r+1, R), C));
        }
    }
    S.insert(se(mp(l, r),  c));
}
ll pytaj(set<se> &S, ll x, ll D){
    auto it=S.lower_bound(mp(mp(x%D+1,0), 0));
    deb(x, D);
    if(it==S.begin())return x%D;
    it--;
    deb(x, D, *it);
    if(x%D<=it->st.nd){
        deb("a");
        if(it->st.st==0 && from_both_sides){
            it=S.end();
            it--;
            return x%D+D-it->st.st+1+it->nd;
        }
        return x%D-it->st.st+1+it->nd;
    }
    else return x%D;
}
void solve() {
	int n, q;
    cin>>n>>q;
    ll A, B, D;
    cin>>D>>A>>B;
    vector<pair<ll ,ll>> seg;
    for(int i=0; i<n; i++){
        ll l, r;
        cin>>l>>r;
        r=max(r, D-1);
        if(i==0){
            seg.pb(mp(l, r));
        }
        else {
            if(l<=seg.back().nd+1){
                seg.back().nd=max(seg.back().nd, r);
            }
            else seg.pb(mp(l, r));
            int t=lower_bound(all(seg), mp(r+2-D,0ll))-seg.begin();
            t--;
            if(t>=0){
                seg.back().nd=max(r, seg[t].nd+D);
            }
        }
        if(seg.back().nd-seg.back().st>=D-1)seg.back().nd=1e12;
        deb(seg);
    }
    B-=A*D;
    n=seg.size();
    vector<pair<ll, int> > Q;
    vector<ll> res(q);
    for(int i=0; i<q; i++){
        ll x;
        cin>>x;
        int t=lower_bound(all(seg), mp(x+1, 0ll))-seg.begin();
        t--;
        if(t>=0 && seg[t].nd>=x){
            res[i]=-1;
            continue;
        }
        Q.pb(mp(x, i));
        res[i]=x*A;
    }
    if(B>0){
        vector<ll> odp(n);
        for(int i=0; i<n; i++){
            int t=lower_bound(all(seg), mp(seg[i].nd+2-D,0ll))-seg.begin();
            if(t==0)odp[i]=1;
            else{
                odp[i]=odp[t-1]+1;
            }
        }
        for(auto &[x, id] : Q){
            int t=lower_bound(all(seg), mp(x+1, 0ll))-seg.begin();
            t--;
            if(t>=0)res[id]+=B*odp[t];
        }
    }
    else{
        deb(A, B, D, Q);
        set<se> S;
        sort(all(Q));
        reverse(all(Q));
        seg.pb(mp(2e12, 2e12));
        for(auto &[l, r] : seg){
            while(Q.size() && Q.back().st<l){
                ll x=Q.back().st;
                int id=Q.back().nd;
                Q.pop_back();
                res[id]+=B*((x-pytaj(S, x, D))/D);
            }
            if(l>1e12){
                break;
            }
            ll val=pytaj(S, l-1, D);
            deb(l, r, val);
            if(l/D==r/D){
                insert(S, l%D, r%D, val);
                if(l%D==0 || r%D==D-1)from_both_sides=0;
            }
            else{
                insert(S, l%D, D-1, val);
                insert(S, 0, r%D, val);
                from_both_sides=1;
            }
            deb("S");
            for(auto &i:S){
                deb(i);
            }
        }
    }
    for(int i=0; i<q; i++){
        cout<<res[i]<<"\n";
    }
}

int main() {
	cin.tie(0)->sync_with_stdio(0);
	int tt = 1;
	// cin >> tt;
	FOR(te, 0, tt) solve();
	return 0;
}

Compilation message

Main.cpp:17:18: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   17 | auto &operator<<(auto &o, pair<auto, auto> p) {
      |                  ^~~~
Main.cpp:17:32: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   17 | auto &operator<<(auto &o, pair<auto, auto> p) {
      |                                ^~~~
Main.cpp:17:38: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   17 | auto &operator<<(auto &o, pair<auto, auto> p) {
      |                                      ^~~~
Main.cpp:19:17: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   19 | auto operator<<(auto &o, auto x)->decltype(end(x), o) {
      |                 ^~~~
Main.cpp:19:26: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   19 | auto operator<<(auto &o, auto x)->decltype(end(x), o) {
      |                          ^~~~
Main.cpp: In function 'void solve()':
Main.cpp:156:23: warning: unused variable 'i' [-Wunused-variable]
  156 |             for(auto &i:S){
      |                       ^
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Incorrect 46 ms 7112 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 2 ms 600 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 38 ms 7316 KB Output is correct
2 Correct 39 ms 7368 KB Output is correct
3 Correct 2 ms 600 KB Output is correct
4 Correct 176 ms 18128 KB Output is correct
5 Correct 160 ms 18072 KB Output is correct
6 Correct 173 ms 18252 KB Output is correct
7 Correct 169 ms 18076 KB Output is correct
8 Correct 173 ms 18204 KB Output is correct
9 Correct 201 ms 18480 KB Output is correct
10 Correct 211 ms 18364 KB Output is correct
11 Correct 197 ms 18364 KB Output is correct
12 Correct 182 ms 18108 KB Output is correct
13 Correct 176 ms 18124 KB Output is correct
14 Correct 80 ms 11272 KB Output is correct
15 Correct 65 ms 10444 KB Output is correct
16 Correct 69 ms 10320 KB Output is correct
17 Correct 182 ms 17984 KB Output is correct
18 Correct 179 ms 17784 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Incorrect 46 ms 7112 KB Output isn't correct
4 Halted 0 ms 0 KB -