当时考试时间剩下太短了然后就挂掉了。。其实是个简单的数据结构。

话说一看最小还以为是动规呢。。
将两堆头对头排。比如样例就是 541|273
因为是必须有优先级次序,依次拿的话,看优先级大小相邻的两个物品位置,中间隔着多少其他物品就行了。因为你要移动相邻的两个,你肯定得把它们中间的所有物品移动一遍(因为两个都得先后在最上边)。
标好号,用前缀和,拿树状数组维护,拿走之后变为0。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define N 200000
#define pos(i,a,b) for(int i=(a);i<=(b);i++)
int n1,n2;
int n;
inline int read()
{
    int su=0;
    char ch=getchar();
    while(ch<'0'||ch>'9')
       ch=getchar();
    while(ch<='9'&&ch>='0')
    {
       su=su*10+ch-'0';
       ch=getchar();
    }

    return su;
}
struct haha
{
       int num;
       int pos;
}cun[N];
int c[N];
inline int lowbit(int x)
{
    return x&(-x);
}
inline void add(int i,int x)
{
     while(i<=n)
     {
        c[i]+=x;
        i+=lowbit(i);
     }
}
int temp;
inline int cmp(const haha &a,const haha &b)
{
    return a.num>b.num;
}
int ans;
inline int tot(int x)
{
    int sum=0;
    while(x>0)
    {
       sum+=c[x];
       x-=lowbit(x);
    }
    return sum;
}
inline int Sum(int i,int j)
{
    if(tot(j)>tot(i-1))
      return tot(j)-tot(i-1);
    else
      return tot(i)-tot(j-1);
}
inline int haha()
{
    n1=read();
    n2=read();
    n=n1+n2;
    pos(i,1,n1)
    {
         cun[i].num=read();
         if(cun[i].num>temp)
         {
           temp=cun[i].num;
           ans=i;
         }
         cun[i].pos=n1-i+1;
    }
    pos(i,1,n2)
    {
          cun[n1+i].num=read();
          if(cun[n1+i].num>temp)
          {
            temp=cun[n1+i].num;
            ans=i;
          }
          cun[n1+i].pos=n1+i;
    }
    sort(cun+1,cun+n1+n2+1,cmp);
    ans--;
    pos(i,1,n)
      add(i,1);

    add(cun[1].pos,-1);
    //cout<<tot(n);
    pos(i,2,n)
    {
       ans+=Sum(cun[i].pos,cun[i-1].pos);
       ans--;
       add(cun[i].pos,-1);
    }
    printf("%d",ans);
}
int sb=haha();
int main()
{;;}

  

[JLOI2013]删除物品 树状数组的更多相关文章

  1. [bzoj3192][JLOI2013]删除物品(树状数组)

    3192: [JLOI2013]删除物品 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 872  Solved: 508[Submit][Status ...

  2. 1057. Stack (30) - 树状数组

    题目如下: Stack is one of the most fundamental data structures, which is based on the principle of Last ...

  3. [bzoj3192][JLOI2013]删除物品_树状数组_栈

    删除物品 bzoj-3192 JLOI-2013 题目大意:给你n个物品,分成2堆.所有的物品有不同的优先级.我只可以将一堆中的堆顶移动到另一个堆的堆顶.而如果当前物品是全局所有物品中优先级最高的,我 ...

  4. BZOJ 3192: [JLOI2013]删除物品(树状数组)

    题面: https://www.lydsy.com/JudgeOnline/problem.php?id=3192 题解: 首先每次一定是来回移动直到最大的到顶上. 所以我们可以将第两个堆的堆顶接起来 ...

  5. BZOJ 3192: [JLOI2013]删除物品 奇淫技巧&树状数组

    点我看题 这题十分奇淫技巧...QAQ因为知道是树状数组的题QAQ刚开始以为维护两个数组的树状数组然后模拟从大到小,然后发现不会打QAQ 于是悄悄咪咪翻开题解了. 实际上两个数组可以看做一个数组 如 ...

  6. bzoj3192: [JLOI2013]删除物品(树状数组)

    既然要从一个堆的堆顶按顺序拿出来放到第二个堆的堆顶,那么我们就可以把两个堆顶怼在一起,这样从一个堆拿到另一个堆只需要移动指针就好了. 换句话说,把1~n倒着,n+1到n+m正着,用一个指针把两个序列分 ...

  7. HDU-3436 Queue-jumpers 树状数组 | Splay tree删除,移动

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3436 树状数组做法<猛戳> Splay tree的经典题目,有删除和移动操作.首先要离散化 ...

  8. Educational Codeforces Round 87 (Rated for Div. 2) D树状数组加二分删除的值

    Sample Input 5 4 1 2 3 4 5 -5 -1 -3 -1 Sample Output 3 思路,首先发现a[i]的值的范围是在1~n之间,每次插入我们可以直接把cnt[a[i]]+ ...

  9. 3192: [JLOI2013]删除物品

    3192: [JLOI2013]删除物品 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1366 Solved: 794 [Submit][Statu ...

随机推荐

  1. 怎么利用composer创建laravel项目

    前提:已经安装了composer的电脑 创建laravel项目: 第一步: 找到你要创建文件的地方 然后打开doc,输入:composer create_project laravel/laravel ...

  2. H5学习第二周

    怎么说,在各种感觉中h5学习的第二周已经过来了,先总结一下,感觉学习h5是一件让我爱恨交加的事,学会一些新的知识并把它成功运行出来的时候是非常激动和兴奋的,但是有时候搞不懂一个标签或者属性的时候,就有 ...

  3. JavaScript 定义 类

    JavaScript 定义 类 一 构建类的原则 构造函数 等于 原型的constructor //构造函数 function Hero(name,skill){ this.name = name; ...

  4. Vijos 1111 小胖的水果 LCS

    描述 xuzhenyi到大同水果店去买水果,但老板huyichen告诉他每次只能买一种,但是xuzhenyi想吃两种,于是在讨价还价之后,huyichen说只要xuzhenyi能把他想要的两种水果合并 ...

  5. Chrome浏览器扩展开发系列之十:桌面通知Notification

    Desktop Notification也称为Web Notification,是在Web页面之外,以弹出桌面对话框的形式通知用户发生了某事件.Web Notification于2015.9.10成为 ...

  6. jsp注册页面的省份联动(网上copy别人的,然后自己弄了一下才知道怎么用)

    首先写一个js里面是所有的省份一些七七八八的东西,直接复制黏贴过去就好了. var addressInit = function(_cmbProvince, _cmbCity, _cmbArea, d ...

  7. python cookbook第三版学习笔记十:类和对象(一)

    类和对象: 我们经常会对打印一个对象来得到对象的某些信息. class pair:     def __init__(self,x,y):         self.x=x         self. ...

  8. 事务之使用JDBC进行事务的操作

    本篇讲述数据库中非常重要的事务概念和如何使用MySQL命令行窗口来进行数据库的事务操作.下一篇会讲述如何使用JDBC进行数据库的事务操作. 事务是指数据库中的一组逻辑操作,这个操作的特点就是在该组逻辑 ...

  9. 文件的默认权限UMASK

    当进入Linux系统后新创建的文件或者文件夹总是会有一个默认的权限,那么这个权限是如何设置的呢? umask就是设置文件与目录的默认权限 1. 查看umask 直接查看, [root@centos6 ...

  10. 苹果APP发布

    1 发布方式 苹果发布上架有两种方式,一种是上传到苹果商店,一种是挂在web服务器上扫描下载,下面分别介绍这两种发布方式 1.1 上传AppStore 1. 用公司账号或者个人开发账号生成上架.p12 ...