#include <bits/stdc++.h> using namespace std; int n,m,cnt,cur,cv,i,j,le[100100],ri[100100],x[100100],y[100100],q[100100],k[100100],a[100100],c[100100],r[100100]; pair<int,int> b[100100]; char s[100100]; bool cmp(int i, int j) { return q[i]<q[j]; } void modify(int i, int v) { a[i]+=v; for (; i<=n; i=(i<<1)-(i&(i-1))) c[i]+=v; } int fs(int i) { int r=0; for (; i>0; i&=i-1) r+=c[i]; return r; } int main() { scanf("%d",&n); scanf("%s",s); for (i=1; i<=n; i++) if (s[i-1]=='1') le[i]=i; else le[i]=le[i-1]; ri[n+1]=n+1; for (i=n; i>=0; i--) if (s[i-1]=='1') { b[cnt++]=make_pair(ri[i+1]-i,i); ri[i]=i; } else ri[i]=ri[i+1]; sort(b,b+cnt); reverse(b,b+cnt); scanf("%d",&m); for (i=0; i<m; i++) { scanf("%d%d%d",&x[i],&y[i],&q[i]); k[i]=i; } sort(k,k+m,cmp); for (i=0; i<m; i=j) { cv=q[k[i]]; for (j=0; j<cnt; j++) if (b[j].first>cv) { modify(b[j].second,(b[j].first-1)/cv-a[b[j].second]); } else if (a[b[j].second]>0) { modify(b[j].second,-1); } else break; for (j=i; j<m && cv==q[k[j]]; j++) { cur=k[j]; if (ri[x[cur]]>=y[cur]) { r[cur]=(y[cur]-x[cur]-1)/cv; } else { int xx=ri[x[cur]]; int yy=le[y[cur]]; r[cur]=(xx-x[cur]-1)/cv+(y[cur]-yy-1)/cv; if (xx<yy) r[cur]+=fs(yy-1)-fs(xx-1); } } } for (i=0; i<m; i++) printf("%d\n",r[i]); return 0; }