记录编号 |
583636 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
排列变换 |
最终得分 |
100 |
用户昵称 |
嗨嗨嗨 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.923 s |
提交时间 |
2023-10-19 20:31:39 |
内存使用 |
10.50 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,p[1000010],c[1000010],ans,x;
inline ll read()
{
ll k=0,f=1;
char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) k=(k<<1)+(k<<3)+(c&15);
return k*f;
}
inline void write(ll x)
{
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
inline ll lowbit(ll x)
{
return x&(-x);
}
inline void add(ll p,ll x)
{
for(;p<=n+1;p+=lowbit(p))
{
c[p]+=x;
}
}
inline ll q(ll p)
{
ll ans=0;
for(;p;p-=lowbit(p))
{
ans+=c[p];
}
return ans;
}
int main()
{
freopen("permutrans.in","r",stdin);
freopen("permutrans.out","w",stdout);
n=read();
for(ll i=1;i<=n;i++) p[i]=read();
for(ll i=1;i<=n;i++)
{
if(p[i]>=i)
{
add(1,1);
add(p[i]-i+2,-1);
add(n-i+2,1);
add(n+1,-1);
}
else
{
add(n-i+2,1);
add(n-i+p[i]+2,-1);
}
}
for(ll i=1;i<=n;i++)
{
ll tmp=q(i);
if(tmp>ans)
{
ans=tmp;
x=i-1;
}
}
write(ans);
putchar(' ');
write(x);
return 0;
}