Pagini recente » Cod sursa (job #185942) | Cod sursa (job #370699) | Cod sursa (job #464099) | Cod sursa (job #1125042) | Cod sursa (job #3169826)
#include <fstream>
using namespace std;
const int nmax = 1000005;
ifstream f("intrare.in");
ofstream g("iesire.out");
int st[nmax], dr[nmax], c[nmax];
int n;
int sol[nmax], Next[nmax];
int main(){
f >> n;
f >> st[1] >> dr[1] >> c[1];
Next[1] = 1;
for(int i = 2; i < n; i++){
st[i] = st[i - 1] * i % n;
dr[i] = dr[i - 1] * i % n;
c[i] = c[i - 1] * i % n;
Next[i] = i;
}
Next[n] = 0;
for(int i = n - 1; i >= 1; i--){
int stanga = min(st[i], dr[i]);
int dreapta = max(st[i], dr[i]);
for(int j = stanga; j <= dreapta && j < n;){
if(sol[j] == 0){
sol[j] = c[i];
Next[i] = dreapta + 1;
j++;
}
else{
j = Next[j];
}
}
}
for(int i = 1; i < n; i++){
g << sol[i] << '\n';
}
}
// #include <fstream>
// using namespace std;
// ifstream f("curcubeu.in");
// ofstream g("curcubeu.out");
// const int nmax = 1000005;
// int Next[nmax];
// int st[nmax], dr[nmax], sol[nmax], c[nmax];
// int n;
// int main(){
// f >> n >> st[1] >> dr[1] >> c[1];
// Next[1] = 1;
// for(int i = 2; i <= n - 1; i++){
// Next[i] = i;
// st[i] = (1ll * st[i - 1] * i) % n;
// dr[i] = (1ll * dr[i - 1] * i) % n;
// c[i] = (1ll * c[i - 1] * i) % n;
// }
// Next[n] = 0;
// for(int i = n - 1; i >= 1; i--){
// int stanga = min(st[i], dr[i]);
// int dreapta = max(st[i], dr[i]);
// for(int j = stanga; j <= dreapta && j < n;){
// if(sol[j] == 0){
// sol[j] = c[i];
// Next[j] = dreapta + 1;
// j++;
// }
// else{
// j = Next[j];
// }
// }
// }
// for(int i = 1; i < n; i++){
// g << sol[i] << '\n';
// }
// }