加入unsigned 后就不会了但是WA75pts了,请问为什么
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10;
const int Mod=1e9+7;
int n,m,q,lst[N];
int p[N],dp[N][61],num[N][61];
signed main(){
cin>>n>>m>>q;
string s;cin>>s;
s=' '+s;
int nxt=0;
for(int i=1;i<=n;i++){
if(s[i]=='1') nxt=i;
lst[i]=nxt;
}
for(int i=1;i<=n;i++){
int l1=i,r1=0,l2=1,r2=0;
int now=(i+m-1)/n*n-n;
if(now<0) now=0;
r1=min(n,i+m);
if(i+m>n) r2=(i+m-1)%n+1;
if(lst[r2]>=l2) p[i]=n-i+lst[r2]+now;
else if(now>0) p[i]=now-i+lst[n];
else if(lst[r1]>i) p[i]=lst[r1]-i;
else p[i]=1;
dp[i][0]=(p[i]+i-1)%n+1;
num[i][0]=(p[i]+i-1)/n*n;
}
for(int i=1;i<=60;i++){
for(int j=1;j<=n;j++){
dp[j][i]=dp[dp[j][i-1]][i-1]+num[dp[j][i-1]][i-1];
num[j][i]=num[j][i-1]+(dp[j][i]-1)/n*n;
dp[j][i]=(dp[j][i]-1)%n+1;
}
}
while(q--){
int s,k;cin>>s>>k;
int x=k,ans=(s-1)/n*n;
s=(s-1)%n+1;
for(int i=60;i>=0;i--){
if(x-pow(2,i)>=0){
ans+=num[s][i]%Mod;
s=dp[s][i];
x-=pow(2,i);
}
}
cout<<(ans+s)%Mod<<endl;
}
return 0;
}