#include<cstdio>
#include<cstring>
#include<cstdlib>
const int maxn=30000005;
typedef __int64 ll;
int n,a[maxn];
ll c[10005];
int lowbit(int x)
{
return x & (-x);
}
void Update(int x)
{
while(x<=10000)
{
c[x]++;
x+=lowbit(x);
}
}
ll Query(int x)
{
ll ans=0;
while(x>0)
{
ans+=c[x];
x-=lowbit(x);
}
return ans;
}
int main()
{
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(c,0,sizeof(c));
int m,x,y;
char ch[2];
ll ans=0;
for(int i=1;i<=n;i++)
{
ans+=Query(a[i]-1);
Update(a[i]);
}
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%s",ch);
if(ch[0]=='Q')
{
printf("%I64d\n",ans);
}
else
{
scanf("%d %d",&x,&y);
x++,y++;
int t=a[x];
for(int j=x;j<y;j++)
{
a[j]=a[j+1];
if(t>a[j])
ans++;
if(t<a[j])
ans--;
}
a[y]=t;
}
}
}
return 0;
}
hdu2688树状数组
最新推荐文章于 2019-08-30 00:57:21 发布