TLE code:
const int N=2e6+5;
int n,m;
int i,j,k;
int a[N];
int vis[N];
vector<int> v;
int idx(ll x)
{
int ans=x/100000;
if(x%100000) ans++;
return ans;
}
int main()
{
while(~sdd(n,m)){
int opt,y;
ll x,res;
v.pb(0);
for(int j=1;j<=n;j++){
sd(opt); sll(x); sd(y);
if(opt==1) x=idx(x);
if(opt==1){
int len=v.size();
res=0;
for(int i=1;i<=y;i++){
res+=x;
if(res>m) break;
for(int u=0;u<len;u++){
ll ans=v[u]+res;
if(ans>m) continue;
if(!vis[ans]) vis[ans]=j,v.pb(ans);
}
}
} else{
int len=v.size();
res=1;
for(int i=1;i<=y;i++){
res*=x;
if(idx(res)>m) break;
for(int u=0;u<len;u++){
ll ans=idx(v[u]*res);
if(ans>m) continue;
if(!vis[ans]) vis[ans]=j,v.pb(ans);
}
}
}
}
for(int i=1;i<=m;i++){
if(vis[i]) printf("%d ",vis[i]);
else printf("-1 ");
}
puts("");
}
//PAUSE;
return 0;
}
ACcode:
const int N=2e6+5;
int n,m;
int i,j,k;
//int a[N];
int vis[N];
vector<int> v(N,0);
ll idx(ll x)
{
ll ans=x/100000;
if(x%100000) ans++;
return ans;
}
int main()
{
while(~sdd(n,m)){
int opt,y;
ll x,res;
v[0]=1;
for(int j=1;j<=n;j++){
sd(opt); sll(x); sd(y);
if(opt==1) x=idx(x);
vector<int> vv=v;
if(opt==1){
for(int i=0;i<=m;i++){
if(!v[i]) continue;
res=0;
for(int u=1;u<=y;u++){
res+=x;
if(res>m) break;
ll ans=res+i;
if(ans>m) break;
if(!v[ans]) vv[ans]=vis[ans]=j;
else break;
}
}
} else{
for(int i=0;i<=m;i++){
if(!v[i]) continue;
res=i;
for(int u=1;u<=y;u++){
res=idx(res*x);
if(res>m) break;
if(!v[res]) vv[res]=vis[res]=j;
else break;
}
}
}
v=vv;
}
for(int i=1;i<=m;i++){
if(vis[i]) printf("%d ",vis[i]);
else printf("-1 ");
}
puts("");
}
//PAUSE;
return 0;
}