#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |