小美的彩带是由一条长度为 的彩带一直无限循环得到的,彩带的每一个位置都有一个颜色,用 表示。 因此当 时, 。 小美每次会从左往后或从右往左剪一段长度为 的彩带,她想知道她每次剪下来的彩带有多少种颜色。
区块链毕设网qklbishe.com为您提供问题的解答
using namespace std;
#define int long long
const int N=1e6+10;
const int mo=1e9+7;
int n,m,x,y,z,a[N],k,p[N],b[N];
void add(int x,int y)
{
for(int i=x;i<=2*n;i+=(i&(-i)))
{
b[i]+=y;
}
}
int get(int x)
{
int sum=0;
for(int i=x;i;i-=(i&(-i)))
{
sum+=b[i];
}
return sum;
}
int fid(int x,int y)
{
return get(y)-get(x-1);
}
void slove()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
a[i+n]=a[i];
}
int l=1,r=2*n;
vector<pair<pair<int,int>,int> > v;
for(int i=1;i<=m;i++)
{
char o;
cin>>o>>x;
if(o==’L’)
{
if(x>=n)
{
v.push_back({{n,1},i});
}
else
{
v.push_back({{l+x-1,l},i});
}
l=(l+x)%n;
if(l==0)
{
l=n;
}
}
else
{
if(x>=n)
{
v.push_back({{n,1},i});
}
else
{
v.push_back({{r,r-x+1},i});
}
r=((r-x)%n+n)%n+n;
if(r==n)
{
r=2*n;
}
}
}
map<int,int> mp;
sort(v.begin(),v.end());
r=1;
for(auto[xl,g]:v)
{
auto[x,y]=xl;
while(r<=x)
{
if(mp[a[r]])
{
add(mp[a[r]],-1);
}
add(r,1);
mp[a[r]]=r;
r++;
}
p[g]=fid(y,x);
}
for(int i=1;i<=m;i++)
{
cout<<p[i]<<endl;
}
}
signed main()
{
int t=1;
// cin>>t;
while(t–)
{
slove();
}
}
以上就是关于问题小美的彩带是由一条长度为 的彩带一直无限循环得到的,彩带的每一个位置都有一个颜色,用 表示。 因此当 时, 。
小美每次会从左往后或从右往左剪一段长度为 的彩带,她想知道她每次剪下来的彩带有多少种颜色。的答案
欢迎关注区块链毕设网-
web3一级市场套利打新赚钱空投教程
区块链NFT链游项目方科学家脚本开发培训