제출 #1315477

#제출 시각아이디문제언어결과실행 시간메모리
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(); }

컴파일 시 표준 에러 (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...