A B水题不多说了
题意卡了半小时,然后总算明白了n个数是查询
递归搜索+二分
快结束时其实已经有完整的思路了,但是没时间写了,虽然只出了两题。。但还是猥琐的上分了
今天参考了下别人的代码然后自己写完又调了好多遍。。
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
long long a[100005][3];
long long s[100005],m,n;
long long fun(long long ans)
{
int l=1,r=m,mid;
while(l<=r)
{
mid=(l+r)/2;
if(s[mid]>=ans&&s[mid-1]<ans)
return mid;
else if(s[mid]<ans)
l=mid+1;
else r=mid-1;
}
return mid;
}
long long findres(long long res)
{
long long p=fun(res);
if(a[p][0]==1)
return a[p][1];
long long w=p;
p=res-s[p-1];
p=p%a[w][1];
if(p==0) p=a[w][1];
return findres(p);
}
int main()
{
while(cin>>m)
{
int i;
memset(a,0,sizeof(a));
memset(s,0,sizeof(s));
for(i=1;i<=m;i++)
{
cin>>a[i][0];
if(a[i][0]==1)
{
cin>>a[i][1];
if(i==1)
s[i]=1;
else
s[i]=s[i-1]+1;
}
else
{
cin>>a[i][1]>>a[i][2];
s[i]=s[i-1]+a[i][1]*a[i][2];
}
}
cin>>n;
long long res;
for(i=0;i<n;i++)
{
cin>>res;
cout<<findres(res)<<" ";
}
cout<<endl;
}
return 0;
}