Spoj CLFLARR Solution

#include<bits/stdc++.h>
using namespace std;
int parent[3000000];

int Find(int x)
{
if(parent[x] == x)
return x;

return parent[x] = Find(parent[x]);
}

void Union(int a, int b)
{
int u = Find(a);
int v = Find(b);

int indx = max(u, v);   /// max() function use for update parent index

parent[u] = indx;
parent[v] = indx;
}

int main()
{
int n, q;
cin >> n >> q;

int l[q+5], r[q+5], c[q+5], v[n+5];

for(int i=1;i<=n+1;i++)
{
parent[i] = i;
v[i] = 0;
}

for(int i=0;i<q;i++)
cin >> l[i] >> r[i] >> c[i];

for(int i=q-1;i>=0;i--)
{
int left = Find(l[i]);

while(left <= r[i])
{
v[left] = c[i];
Union(left, left+1);   /// for index update
left = Find(left);     /// for index increment
}
}

for(int i=1;i<=n;i++)
cout << v[i] << "\n";


return 0;
}

Comments

  1. it would be great if comprehensive explanation there

    ReplyDelete

Post a Comment