Submission #1315477

#TimeUsernameProblemLanguageResultExecution timeMemory
1315477panhcutizzColors (RMI18_colors)C++20
0 / 100
5 ms824 KiB
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define vi vector <int>
#define pi pair<int , int>
#define FOR(i , l , r) for(int i = l; i <= r; ++ i)
#define FORD(i , l , r) for(int i = l; i >= r; -- i)
#define all(v) begin(v) , end(v)
#define compact(v) v.erase(unique(all(v)) , v.end())
#define pb push_back
#define eb emplace_back
#define fi first
#define se second

#define anhHieuchimbe signed main

template <class T> bool maximize(T &a , T b){return (a < b) ? a = b , true : false;}
template <class T> bool minimize(T &a , T b){return (a > b) ? a = b , true : false;}

const int nd = 1e5 + 5;

int A[nd] , B[nd];
bool valid[nd];
vi adj[nd];

namespace dsu{
    int par[nd] , sz[nd] , used[nd];
    int totalUp;
    vector <pi> upPar , upSz , upVal;

    void init(int n){
        FOR(i , 1 , n) par[i] = i , sz[i] = 1 , used[i] = valid[i];
        totalUp = 0;
    }

    int get(int u){return u == par[u] ? u : get(par[u]);}

    void unite(int u , int v){
        u = get(u) , v = get(v);
        if(u == v) return;

        if(sz[u] > sz[v]) swap(u , v);
        upPar.eb(u , par[u]);
        par[u] = v;
        upSz.eb(v , sz[v]);
        sz[v] += sz[u];
        upVal.eb(v , used[v]);
        maximize(used[v] , used[u]);
        ++ totalUp;
    }

    void roll_back(){
        while(totalUp){
            par[upPar.back().fi] = upPar.back().se;
            sz[upSz.back().fi] = upSz.back().se;
            used[upVal.back().fi] = upVal.back().se;

            upPar.pop_back();
            upSz.pop_back();
            upVal.pop_back();
            -- totalUp;
        }
    }
}

struct event{
    int u , f , w;
    bool operator<(const event &o)const{
        if(w == o.w) return f < o.f;
        return w > o.w;
    }
};

vector <event> E;

namespace ST{
    vi st[4 * nd];
    bool vis[nd];

    void init(int n){
        ++ n;
        FOR(i , 0 , 4 * n) st[i].clear();
    }

    void up(int id , int l , int r , int a , int b , int u){
        if(l > b || r < a) return;
        if(a <= l && r <= b){
            st[id].pb(u);
            return;
        }
        int mid = (r + l) >> 1;
        up(id * 2 , l , mid , a , b , u);
        up(id * 2 + 1 , mid + 1 , r , a , b , u);
    }

    bool build(int id , int l , int r){
        if(l == r){
            if(E[l].f){
                cout << l << " " << valid[E[l].u] << '\n';
                return dsu::used[dsu::get(E[l].u)] | valid[E[l].u];
            }
            else return true;
        }

        for(int u : st[id]){
            vis[u] = true;
            for(int v : adj[u]) if(vis[v]){
                dsu::unite(u , v);
            }
        }

        int mid = (r + l) >> 1;
        bool res = build(id * 2 , l , mid) & build(id * 2 + 1 , mid + 1 , r);

        dsu::roll_back();
        for(int u : st[id]) vis[u] = false;
        return res;
    }
}

void solve(){
    int n , m;
    cin >> n >> m;

    dsu::init(n);
    E.clear();
    FOR(i , 1 , n) adj[i].clear();

    FOR(i , 1 , n) cin >> A[i];
    FOR(i , 1 , n){
        cin >> B[i];

        if(B[i] > A[i]){
            cout << 0;
            return;
        }

        valid[i] = (A[i] == B[i]);
        E.pb({i , 0 , B[i]});
        E.pb({i , 1 , A[i]});
    }

    E.pb({0 , 0 , -1});
    sort(all(E));

    ST::init(E.size() - 1);

    int timer = 0;
    int tin[nd];

    for(auto [u , f , w] : E) if(w >= 0){
        ++ timer;
        cout << u << " " << f << " " << w << '\n';
        if(!f) tin[u] = timer;
        else{
            ST::up(1 , 1 , E.size() - 1 , tin[u] , timer , u);
        }
    }

    cout << ST::build(1 , 1 , E.size() - 1) << '\n';
}

anhHieuchimbe() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    #define task "task"
    if(fopen(task".inp" , "r")){
        freopen(task".inp" , "r" , stdin);
        freopen(task".out" , "w" , stdout);
    }

    int test_case = 0;
    solve();
}

Compilation message (stderr)

colors.cpp: In function 'int main()':
colors.cpp:171:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  171 |         freopen(task".inp" , "r" , stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
colors.cpp:172:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  172 |         freopen(task".out" , "w" , stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...