60pts,求调
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,q,x;
int w[4000005],vis[2000005],re,s[4000005],num[2000005],round1[2000005];
struct node{
int begin,end,num;
};
node a[2000005];
int chufa[2000005];
signed main()
{
//freopen("data.in","r",stdin);
cin>>n>>q>>x;
for(int i=1;i<=n;i++)
{
cin>>w[i];
}
int po=1,now,re;
for(int i=1;i<=n;i++)
{
w[i+n]=w[i];
}
for(int i=1;i<=2*n;i++)
{
s[i]=s[i-1]+w[i];
}
for(int i=1;i<=n;i++)
{
int l=i,r=2*n;
int ans=r;
while(l<=r)
{
int mid=(l+r)/2;
//cout<<"i:"<<i<<" "<<mid<<" ";
if(s[mid]-s[i-1]>=x)
{
//cout<<"OK"<<endl;
ans=mid;
r=mid-1;
}else{
//cout<<endl;
l=mid+1;
}
}
chufa[i]=ans%n;
if(chufa[i]==0)
{
chufa[i]=n;
}
num[i]=ans-i+1;
}
int cnt=1,biao;
round1[cnt]=1;
vis[1]=1;
for(int i=1;i<=n;i++)
{
//cout<<chufa[i]<<endl;
}
while(1)
{
round1[cnt+1]=chufa[round1[cnt]]+1;
if(round1[cnt+1]==n+1)
{
round1[cnt+1]=1;
}
cnt++;
if(vis[round1[cnt]])
{
biao=vis[round1[cnt]];
break;
}
vis[round1[cnt]]=cnt;
}
cnt--;
for(int i=1;i<=cnt;i++)
{
//cout<<round1[i]<<" "<<num[round1[i]]<<endl;
}
//cout<<biao<<endl;
for(int i=1;i<=q;i++)
{
int t;
cin>>t;
if(t<=cnt)
{
cout<<num[round1[t]]<<endl;
}
else{
int huanjie=cnt-biao+1;
int now=(t-biao+1)%huanjie+biao-1;
if((t-biao+1)%huanjie==0)
{
now=huanjie+biao-1;
}
cout<<num[round1[now]]<<endl;
}
}
return 0;
}