Pagini recente » Cod sursa (job #2986606) | Cod sursa (job #2622757) | Cod sursa (job #2627074) | Cod sursa (job #2932774) | Cod sursa (job #2627057)
#include <fstream>
#define MAXQ 1000000
using namespace std;
struct update {
int st, dr, col;
} q[MAXQ + 1];
int urm[MAXQ + 1];
int sol[MAXQ + 1];
ifstream fin( "curcubeu.in" );
ofstream fout( "curcubeu.out" );
int findRoot( int x ) {
if ( urm[x] == x ) {
return x;
}
return urm[x] = findRoot( urm[x] );
}
void join( int x, int y ) {
urm[x] = urm[findRoot( x )] = findRoot( y );
}
int main() {
int n, i, a, b, c, ind;
fin >> n >> a >> b >> c;
for ( i = n - 1; i >= 1; --i ) {
fin >> q[i].st >> q[i].dr >> q[i].col;
/*printf( "%d %d %d\n", q[i].st, q[i].dr, q[i].col );*/
q[i].st = (a < b ? a : b);
q[i].dr = (a + b) - q[i].st;
q[i].col = c;
urm[i] = i;
a = ((long long)a * i) % n;
b = ((long long)b * i) % n;
c = ((long long)c * i) % n;
}
for ( i = 1; i <= n - 1; ++i ) {
/*printf( "%d %d %d\n", q[i].st, q[i].dr, q[i].col );
for ( ind = 1; ind <= n - 1; ++ind ) {
printf( "%d %d\n", sol[ind], findRoot( ind ) );
}
printf( "\n" );*/
ind = q[i].st;
while ( ind < q[i].dr ) {
if ( sol[ind] == 0 && sol[ind + 1] == 0 ) {
join( ind, ind + 1 );
sol[ind] = q[i].col;
++ind;
} else if ( sol[ind] ) {
ind = findRoot( ind ) + 1;
} else {
sol[ind] = q[i].col;
ind = findRoot( ind + 1 ) + 1;
}
}
if ( sol[q[i].dr] == 0 ) {
sol[q[i].dr] = q[i].col;
}
}
for ( i = 1; i <= n - 1; ++i ) {
fout << sol[i] << "\n";
}
fin.close();
fout.close();
return 0;
}