#include <bits/stdc++.h>
#define ii pair<int, int>
#define fi first
#define se second
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
using ll = long long;
const ll mod=1e9+7;
const int nx=1e5+5;
int n, q, nod[nx<<2], la[nx<<2], res[nx], a[nx];
vector<ii> ve[nx];
void build(int id, int l, int r)
{
la[id]=0;
if(l==r) return void(nod[id]=1);
int mid=(l+r)>>1;
build(id<<1, l, mid);
build(id<<1|1, mid+1, r);
nod[id]=1;
}
void down(int id)
{
if(!la[id]) return;
for(int j = id*2; j <= id*2+1; j++)
la[j]=max(la[j], la[id]), nod[j]=max(nod[j], la[id]);
la[id]=0;
}
void update(int id, int l, int r, int u, int v, int val)
{
if(l>v || r<u) return;
if(l>=u && r<=v)
{
nod[id]=max(nod[id], val);
la[id]=max(la[id], val);
return;
}
int mid=(l+r)>>1;
down(id);
update(id<<1, l, mid, u, v, val);
update(id<<1|1, mid+1, r, u, v, val);
nod[id]=nod[id<<1], nod[id<<1|1];
}
int get(int id, int l, int r, int p)
{
if(l>p || r<p) return 0;
if(l==r) return nod[id];
int mid=(l+r)>>1;
down(id);
return max(get(id<<1, l, mid, p), get(id<<1|1, mid+1, r, p));
}
set<int> st;
void sus()
{
for(int i = 1; i <= n; i++)
cout<<-1<<' ';
exit(0);
}
vector<int> rem, val;
bool cmp(int x, int y)
{
return a[x]<a[y];
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n>>q;
build(1, 1, n);
while(q--)
{
int l, r, x;
cin>>l>>r>>x;
l++, r++, x++;
ve[x].emplace_back(l, r);
update(1, 1, n, l, r, x);
}
for(int i = 1; i <= n; i++)
{
res[i]=0;
a[i]=get(1, 1, n, i);
st.emplace(i);
}
for(int i = n; i >= 1; i--)
{
if(ve[i].empty()) continue;
ii p=ve[i][0];
for(auto it:ve[i])
p.fi=max(p.fi, it.fi), p.se=min(p.se, it.se);
if(p.fi>p.se) sus();
auto it=st.lower_bound(p.fi);
if(it==st.end() || *it>p.se) sus();
res[*it]=i;
for(auto seg:ve[i])
for(it = st.lower_bound(seg.fi); it != st.end() && *it <= seg.se;)
it=st.erase(it);
}
for(int i = 1; i <= n; i++)
{
if(res[i]==0) rem.emplace_back(i);
if(ve[i].empty()) val.emplace_back(i);
}
sort(rem.begin(), rem.end(), cmp);
for(int i = 0; i < rem.size(); i++)
{
if(a[rem[i]]>val[i]) sus();
res[rem[i]]=val[i];
}
for(int i = 1; i <= n; i++)
cout<<res[i]-1<<' ';
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |