题意分析

首先\(\%\%\%\%olinr\)以及花_Q\(julao\)当场切题

然后就是怎么求

\[max(|a-A|,|b-B|)=max(a-A,A-a,B-b,b-B)
\]

我们令\(x_1=(a+b)/2,x_2=(A+B)/2,y_1=(a-b)/2,y_2=(A-B)/2\)

\[max(x_1+y_1-x_2-y_2,x_2+y_2-x_1-y_1,x_1-y_1-x_2+y_2,x_2-y_2-x_1+y_1)
\]

\[=max(x_1-x_2,x_2-x_1)+max(y_1-y_2,y_2-y_1)
\]

\[=|x_1-x_2|+|y_1-y_2|
\]

那么就是用主席树维护\(\{A_i+B_i\}\)以及\(\{A_i-B_i\}\)的中位数

CODE:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<string>
#include<queue>
#include<map>
#include<stack>
#include<list>
#include<set>
#include<deque>
#include<vector>
#include<ctime>
#define ll long long
#define inf 0x7fffffff
#define N 1008
#define IL inline
#define M 308611
#define D double
#define mod 1000000007
#define R register
using namespace std;
/*-------------OI使我快乐-------------*/
int n,m,tot;
int cdy[M],wzy[M],lc[M],rc[M];
int root[M][2],siz[M*25][2],lson[M*25][2],rson[M*25][2];
ll sum[M*25][2];
IL void insert(int A,int &B,int le,int ri,int pos,int knd)
{
// printf("insert %d %d %d\n",le,ri,pos);
B=++tot;
siz[B][knd]=siz[A][knd]+1;
sum[B][knd]=sum[A][knd]+pos;
if(le==ri) return;
int mid=(le+(ll)ri)>>1;
if(pos<=mid) insert(lson[A][knd],lson[B][knd],le,mid,pos,knd),rson[B][knd]=rson[A][knd];
else insert(rson[A][knd],rson[B][knd],mid+1,ri,pos,knd),lson[B][knd]=lson[A][knd];
}
IL int qury_kth(int A,int B,int le,int ri,int k,int knd)
{
if(le==ri) return le;
int mid=(le+(ll)ri)>>1,tmp=siz[lson[B][knd]][knd]-siz[lson[A][knd]][knd];
if(k<=tmp) return qury_kth(lson[A][knd],lson[B][knd],le,mid,k,knd);
else return qury_kth(rson[A][knd],rson[B][knd],mid+1,ri,k-tmp,knd);
}
IL ll qury_sum(int A,int B,int lenow,int rinow,int le,int ri,int knd)
{
if(le<=lenow&&rinow<=ri) return sum[B][knd]-sum[A][knd];
int mid=(lenow+(ll)rinow)>>1;ll res=0;
if(le<=mid) res+=qury_sum(lson[A][knd],lson[B][knd],lenow,mid,le,ri,knd);
if(mid<ri) res+=qury_sum(rson[A][knd],rson[B][knd],mid+1,rinow,le,ri,knd);
return res;
}
IL int qury_cnt(int A,int B,int lenow,int rinow,int le,int ri,int knd)
{
if(le<=lenow&&rinow<=ri) return siz[B][knd]-siz[A][knd];
int mid=(lenow+(ll)rinow)>>1,res=0;
if(le<=mid) res+=qury_cnt(lson[A][knd],lson[B][knd],lenow,mid,le,ri,knd);
if(mid<ri) res+=qury_cnt(rson[A][knd],rson[B][knd],mid+1,rinow,le,ri,knd);
return res;
}
int main()
{
freopen("spy.in","r",stdin);
freopen("spy.out","w",stdout);
read(n);read(m);
for(R int i=1;i<=n;++i) read(cdy[i]);
for(R int i=1;i<=n;++i) read(wzy[i]);
for(R int i=1;i<=n;++i) lc[i]=cdy[i]+wzy[i],rc[i]=cdy[i]-wzy[i];
for(R int i=1;i<=n;++i) insert(root[i-1][0],root[i][0],-maxn,maxn,lc[i],0);
tot=0;
for(R int i=1;i<=n;++i) insert(root[i-1][1],root[i][1],-maxn,maxn,rc[i],1);
while(m--)
{
int le,ri,midx,midy;ll lx,rx,ly,ry;
read(le);read(ri);
midx=qury_kth(root[le-1][0],root[ri][0],-maxn,maxn,(ri-le+2)/2,0);
// puts("now now now");
midy=qury_kth(root[le-1][1],root[ri][1],-maxn,maxn,(ri-le+2)/2,1);
// puts("now now now");
// printf("%d %d\n",midx,midy);
lx=1ll*qury_cnt(root[le-1][0],root[ri][0],-maxn,maxn,-maxn,midx,0)*midx-qury_sum(root[le-1][0],root[ri][0],-maxn,maxn,-maxn,midx,0);
rx=qury_sum(root[le-1][0],root[ri][0],-maxn,maxn,midx,maxn,0)-1ll*qury_cnt(root[le-1][0],root[ri][0],-maxn,maxn,midx,maxn,0)*midx;
// printf("nmow %lld %lld\n",lx,rx);
ly=1ll*qury_cnt(root[le-1][1],root[ri][1],-maxn,maxn,-maxn,midy,1)*midy-qury_sum(root[le-1][1],root[ri][1],-maxn,maxn,-maxn,midy,1);
ry=qury_sum(root[le-1][1],root[ri][1],-maxn,maxn,midy,maxn,1)-1ll*qury_cnt(root[le-1][1],root[ri][1],-maxn,maxn,midy,maxn,1)*midy;
printf("%.2f\n",(lx+rx+ly+ry)/2.0);
}
fclose(stdin);
fclose(stdout);
return 0;
}

HEOI 2019 RP++

考试题 T3的更多相关文章

  1. 考试题T3

    题意分析 这题一看没有什么思路 幸好我们机房的红太阳\(ghj1222\)切了这道题 首先我们考虑风跑一个来回之后人怎么样 就是跑了一个区间 也就是风跑了若干个来回之后 人跑了若干个区间 所以我们考虑 ...

  2. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

  3. [NOIP2016]换教室 D1 T3 Floyed+期望DP

    [NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...

  4. T3 - 构建大型 Web 应用的 JavaScript 框架

    T3 是一个用于构建大型 Web 应用程序的客户端 JavaScript 框架.T3 和大多数的 JavaScript 框架不同.它的意思是一小部分的整体架构,它允许你建立可扩展的客户端代码.T3 应 ...

  5. [NOIP2015]运输计划 D2 T3 LCA+二分答案+差分数组

    [NOIP2015]运输计划 D2 T3 Description 公元2044年,人类进入了宇宙纪元. L国有n个星球,还有n-1条双向航道,每条航道建立在两个星球之间,这n-1条航道连通了L国的所有 ...

  6. 有三个线程T1 T2 T3,如何保证他们按顺序执行-转载

    T3先执行,在T3的run中,调用t2.join,让t2执行完成后再执行t3 在T2的run中,调用t1.join,让t1执行完成后再让T2执行 public class Test { // 1.现在 ...

  7. 现在有T1、T2、T3三个线程,怎样保证T2在T1执行完后执行,T3在T2执行完后执行?使用Join

    public class TestJoin { public static void main(String[] args) { Thread t1 = new Thread(new T1(), &q ...

  8. 学军NOI训练13 T3 白黑树

    唉,大学军有自己的OJ就是好,无限orz 只有周六的比赛是开放的囧,这场比赛最后因为虚拟机卡住没有及时提交…… 否则就能让大家看到我有多弱了…… 前两题题解写的很详细,可以自己去看,我来随便扯扯T3好 ...

  9. win8.1 64 安装用友T3+sql2005-64步骤

    1. 环境:win8.1 64 专业版  4G内存  .net framwork 3.5 2.初始过程及所需软件 安装sql2008数据库,安装完T3发现并不支持此数据库,运行T3老是出现连接数据时的 ...

随机推荐

  1. 子串字谜substring anagrams

    [抄题]: 给定一个字符串 s 和一个 非空字符串 p ,找到在 s 中所有关于 p 的字谜的起始索引.字符串仅由小写英文字母组成,字符串 s 和 p 的长度不得大于 40,000.输出顺序无关紧要. ...

  2. javascript+php实现根据用户时区显示当地时间的方法

    本文实例讲述了javascript+php实现根据用户时区显示当地时间的方法.分享给大家供大家参考.具体如下: 在跨时区应用中会用到下面代码,这是以前写的一段代码. 服务器保存相关时间配置,保存形式为 ...

  3. Chrome 强制刷新缓存的方法

    https://jingyan.baidu.com/article/11c17a2c2a9e27f446e39d98.html

  4. [Training Video - 5] [Groovy Script Test Step - Collections, Exceptions] HashSet and Hashtable

    Hashset: HashSet set = new HashSet() set.add("India") set.add("USA") set.add(&qu ...

  5. [SoapUI]怎样保存response到本地文件夹

    def myOutFile = "D:/AUS/Aspect Huntley feed URLs/Automation Save Responses/ahresearch.xml" ...

  6. jquery.cookie 介绍 和 用法

    1.依赖jQuery库 2.浏览器兼容性情况 3.下载 官方github:https://github.com/carhartl/jquery-cookie 4.使用 创建一个整站cookie $.c ...

  7. SQL group by 分组后,同一组的排序后取第一条

    SELECT * FROM(                SELECT                     [SPID]                    ,[PH1]           ...

  8. 网络爬虫--requests库中两个重要的对象

    当我们使用resquests.get()时,返回的时response的对象,他包含服务器返回的所有信息,也包含请求的request的信息. 首先: response对象的属性有以下几个, r.stat ...

  9. Linux驱动框架之misc类设备驱动框架

    1.何为misc设备 (1)misc中文名就是杂项设备\杂散设备,因为现在的硬件设备多种多样,有好些设备不好对他们进行一个单独的分类,所以就将这些设备全部归属于 杂散设备,也就是misc设备,例如像a ...

  10. underscore arrays

    1._.first():返回array(数组)的第一个元素.传递 n参数将返回数组中从第一个元素开始的n个元素 _.first = _.head = _.take = function(array, ...