题解:

二分+树状数组

记录以下i在当前拍第几

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=;
int a[N],f1[N],f2[N],n,m,x,y,num[N];
int js(int x)
{
int ans=;
for (;x;x-=x&-x)ans+=num[x];
return ans;
}
void inster(int x,int y)
{
for (;x<=n;x+=x&-x)num[x]+=y;
}
int cmp(int x,int y)
{
return a[x]<a[y];
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)scanf("%d",&a[i]),f1[i]=f2[i]=i;
sort(f1+,f1+n+,cmp);
for (int i=;i<=n;i++)f2[f1[i]]=i;
for (int i=;i<=n;i++)inster(i,a[f1[i]]-a[f1[i-]]);
while (m--)
{
scanf("%d%d",&x,&y);
if (x==)
{
if (js(n)<y){puts("");continue;}
int l=,r=n;
while (l<r)
{
int mid=(l+r)/;
if (y>js(mid))l=mid+;
else r=mid;
}
printf("%d\n",n-l+);
}
if (x==)
{
if (js(n)<y)continue;
int l=,r=n;
while (l<r)
{
int mid=(l+r)/;
if (y>js(mid))l=mid+;
else r=mid;
}
inster(l,-);
}
if (x==)
{
int l=,r=n,k=js(f2[y]);
while (l<r)
{
int mid=(l+r+)/;
if (k<js(mid))r=mid-;
else l=mid;
}
swap(f1[f2[y]],f1[l]);
swap(f2[f1[f2[y]]],f2[f1[l]]);
inster(l,);
inster(l+,-);
}
}
}

spoj8406的更多相关文章

随机推荐

  1. Python3基础 response.getcode 得到http的状态 200表示正常

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  2. Python3基础 super 子类调用父类的__init__

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  3. P2894 [USACO08FEB]酒店Hotel 线段树

    题目大意 多次操作 查询并修改区间内长度==len的第一次出现位置 修改区间,变为空 思路 类似于求区间最大子段和(应该是这个吧,反正我没做过) 维护区间rt的 从l开始向右的最长长度 从r开始向左的 ...

  4. SpringBoot中的Quartz应用

    Spring自带定时器任务: code: import org.springframework.beans.factory.annotation.Configurable; import org.sp ...

  5. decimal and double ToString problem

    decimal d2 = 0.0000002500m; Console.WriteLine(d2.ToString()); double d3 = 0.0000002500; Console.Writ ...

  6. spring boot 多数据源 + 事务控制

    1,首先在启动类加上@EnableTransactionManagement注解 package cn.bforce.common; import org.springframework.boot.S ...

  7. 【Django】【四】测试

    [Testing in Django] 通过参数可控制Django项目不同级别的测试. 1. 运行sign应用下所有的测试用例: \\guest\python manage.py test sign ...

  8. shell 去掉字符串的单引号

    echo \'deded\' | sed $'s/\'//g'

  9. 常规css,js引入

    php // css,js用 $this->assign('MODULE_NAME',MODULE_NAME); $this->assign('ACTION_NAME',ACTION_NA ...

  10. 使用Fragment适应不同屏幕和分辨率

    Fragment是Android3.0后增加的新控件,有点类似于Activity组件,也是用来承载各种View元素.Google增加这个 玩意的目的是为了平板电脑里面可以复用部分显示的View,只要写 ...