#include #define Nmax 100005 #define INF 1000000000 #define pii pair #define mp make_pair #define fi first #define se second using namespace std; struct qry { int st,dr,D,ind; bool operator < (const qry &A) const { return DQ[i-1].D) Make_sums(Q[i].D); ans[Q[i].ind]+=s[Q[i].dr]-s[Q[i].st-1]; } else {*/ for(j=Q[i].st;j<=Q[i].dr;++j) ans[Q[i].ind]+=(v[j]/Q[i].D); //} } int main() { int i,j,x,y,z,p1,p2; qry w; #ifndef ONLINE_JUDGE freopen ("date.in", "r", stdin); freopen ("date.out", "w", stdout); #endif cin>>len>>(sir+1); for(i=1;i<=len;) { for(;i<=len && sir[i]=='1';++i); if(i>len) continue; for(j=i;j<=len && sir[j]=='0';++j); --j; segm[++n]=mp(i,j); v[n]=j-i+1; i=j+1; } //cout<>m; len=0; for(i=1;i<=m;++i) { cin>>x>>y>>z; p1=upper_bound(segm+1,segm+n+1,mp(x,INF))-segm; p2=upper_bound(segm+1,segm+n+1,mp(y,INF))-segm-1; if(p1>1) { if(y<=segm[p1-1].se) { ans[i]=(y-x-1)/z; continue; } ans[i] += max(segm[p1-1].se-x,0)/z; } if(segm[p2].se>=y) { ans[i] += max(y-segm[p2].fi,0)/z; if(p2-1>=p1) { w.ind=i; w.st=p1; w.dr=p2-1; w.D=z; //cout<=p1) { w.ind=i; w.st=p1; w.dr=p2; w.D=z; Q[++len]=w; } } } Solve(); for(i=1;i<=m;++i) cout<