★   输入文件:alfheim.in   输出文件:alfheim.out   简单对比
时间限制:1 s   内存限制:128 MB

【题目背景】

『谜题在丛林中散发芳香
绿叶上露珠跳跃着歌唱
火焰在隐暗的角落升腾飞起
月华照射着神祇们忠诚的信徒。』

————《瓦尔基里福音书·第六乐章:幻想》————

【题目描述】

Tristan 解决了英灵殿的守卫安排后,便到达了静谧的精灵领地——Alfheim。由于Midgard
处在Alfheim 和冥界Hel 的中间,精灵族领地尚未受到冥界恶灵的侵入。族长Galanodel 为
了帮助米德加尔特抵御外敌,对邪恶亡灵军团使用了高等魔法,从而使得亡灵军团每个士兵
的行进速度变得不一致,从而打乱冥王Hel 安排的最佳阵型。由于这个军团离Midgard 还很
远,因此在抵达Midgard 之前,对于A、B 两个亡灵,若A 的初始位置在B 后面且A 的速
度比B 快,A 就会冲到B 的前面去。现在Galanodel 想知道,会有多少对亡灵之间出现反超
现象?

【输入格式】

第一行一个整数n,表示排成一队的邪恶亡灵军团有多少人。
第二行n 个整数a[i],表示邪恶亡灵们在数轴上的初始坐标。数据保证这些坐标全部不同。
亡灵军团向数轴正方向前进。
第三行n 个整数v[i],表示邪恶亡灵们的行进速度。

【输出格式】

一行一个正整数k,表示「反超」的个数。

【样例输入】

3
1 2 3
2 1 3

【样例输出】

1

【提示】

Time Limit:1s

对于30%的数据,1<= N<= 1000;
对于100%的数据,1<=N<= 10^5。
所有数据的绝对值均不超过maxlongint。

【来源】

《末世神话:精灵族的急援》

线段树

单点修改,区间查询

按速度排序,每插入一个点之前,寻找比当前亡灵插入早的比他靠前的亡灵累加。

屠龙宝刀点击就送

#include <algorithm>
#include <ctype.h>
#include <cstdio>
#define N 100005 using namespace std;
typedef long long LL;
inline void read(LL &x)
{
register char ch=getchar();
for(x=;!isdigit(ch);ch=getchar());
for(;isdigit(ch);ch=getchar()) x=x*+ch-'';
}
struct Segment
{
int l,r,mid,val;
Segment *ch[];
Segment()
{
val=;
ch[]=ch[]=NULL;
}
}*root=new Segment;
void build(Segment *&k,int l,int r)
{
k=new Segment;
k->l=l;k->r=r;
if(l==r) {k->val=;return;}
k->mid=l+r>>;
build(k->ch[],l,k->mid);
build(k->ch[],k->mid+,r);
}
struct wl
{
LL pos,v;
bool operator<(wl a)const
{
if(v==a.v) return pos<a.pos;
else return v<a.v;
}
}wl[N];
LL n,ans,Rm;
LL query(Segment *&k,int l,int r)
{
if(k->l==l&&k->r==r)
return k->val;
if(l>k->mid) return query(k->ch[],l,r);
else if(r<=k->mid) return query(k->ch[],l,r);
else return query(k->ch[],l,k->mid)+query(k->ch[],k->mid+,r);
}
void change(Segment *&k,int t)
{
if(k->l==k->r)
{
k->val++;
return;
}
if(t<=k->mid) change(k->ch[],t);
else change(k->ch[],t);
k->val=k->ch[]->val+k->ch[]->val;
}
int Main()
{
freopen("alfheim.in","r",stdin);
freopen("alfheim.out","w",stdout);
read(n);
for(int i=;i<=n;++i) read(wl[i].pos),Rm=max(Rm,wl[i].pos);
for(int i=;i<=n;++i) read(wl[i].v);
build(root,,Rm);
sort(wl+,wl++n);
for(int i=;i<=n;++i)
{
if(wl[i].pos+<=Rm) ans+=query(root,wl[i].pos+,Rm);
change(root,wl[i].pos);
}
printf("%lld\n",ans);
return ;
}
int sb=Main();
int main(int argc,char *argv[]) {;}

COGS 1144. [尼伯龙根之歌] 精灵魔法的更多相关文章

  1. 「杂烩」精灵魔法(P1908逆序对弱化版)

    「杂烩」精灵魔法(P1908逆序对弱化版) 题面: 题目描述 \(Tristan\)解决了英灵殿的守卫安排后,便到达了静谧的精灵领地--\(Alfheim\) .由于$ Midgard$ 处在$ Al ...

  2. [题解](树形dp/换根)小x游世界树

    2. 小x游世界树 (yggdrasi.pas/c/cpp) [问题描述] 小x得到了一个(不可靠的)小道消息,传说中的神岛阿瓦隆在格陵兰海的某处,据说那里埋藏着亚瑟王的宝藏,这引起了小x的好奇,但当 ...

  3. 天气预报API(二):全球城市、景点代码列表(“旧编码”)

    说明 2016-12-10 补充 (后来)偶然发现中国天气网已经有城市ID列表的网页...还发现城市编码有两种,暂且称中国天气网这些编码为旧标准"旧编码"的特征是 9个字符长度; ...

  4. words2

    餐具:coffee pot 咖啡壶coffee cup 咖啡杯paper towel 纸巾napkin 餐巾table cloth 桌布tea -pot 茶壶tea set 茶具tea tray 茶盘 ...

  5. 个人阅读作业Week17

      个人阅读作业Week17 reading buaa software   解决的问题 这是提出问题的博客链接:http://www.cnblogs.com/SivilTaram/p/4830893 ...

  6. Oberon程序设计语言简介

    Oberon奥伯龙是一种通用编程语言,也是一种同名操作系统(由Oberon语言开发,且参考过贝尔实验室的新一代网络操作系统Plan9),是由原Pascal程序设计语言的发明者Niklaus Wirth ...

  7. Chtholly Nota Seniorious

    题目背景 大样例下发链接: https://pan.baidu.com/s/1nuVpRS1 密码: sfxg こんなにも.たくさんの幸せをあの人に分けてもらった だから.きっと 今の.私は 谁が何と ...

  8. 个人博客作业Week3(微软必应词典客户端的案例分析)

    软件缺陷常常又被叫做Bug,即为计算机软件或程序中存在的某种破坏正常运行能力的问题.错误,或者隐藏的功能缺陷.缺陷的存在会导致软件产品在某种程度上不能满足用户的需要.IEEE729-1983对缺陷有一 ...

  9. M2 终审

    1.团队成员简介 左边:马腾跃 右边:陈谋 左上:李剑锋  左下:仉伯龙 右:卢惠明 团队成员及博客: 李剑锋:        Blog:      http://www.cnblogs.com/Po ...

随机推荐

  1. HDOJ-2034

    人见人爱A-B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  2. 使用 Multipath TCP 为 iOS 创建备份连接(转)

    这篇文章的英文版如下: https://support.apple.com/en-us/HT201373 这里咱们采用苹果手机打开测试网站,发现没有检测到MPTCP,初步猜想可能需要打开什么设置,后续 ...

  3. 技术胖Flutter第四季-20导航的参数传递和接受-1

    技术胖Flutter第四季-20导航的参数传递和接受-1 视频地址:https://www.bilibili.com/video/av35800108/?p=21 先安装一个新的插件: Awesome ...

  4. jquery登录的异步验证

    //定义一个json var validate = { username : false, pwd : false, pwded : false, verify : false, loginUsern ...

  5. 使用git命令将本地项目上传到GIthub

    1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 2.把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点“.”,意为添加文 ...

  6. Gym 100851A Adjustment Office (思维)

    题意:给定一个 n*n 的矩阵,然后有 m 个询问,问你每一行或者每一列总是多少,并把这一行清空. 析:这个题不仔细想想,还真不好想,我们可以根据这个题意,知道每一行或者每一列都可以求和公式来求,然后 ...

  7. CodeForces - 566D Restructuring Company 并查集的区间合并

    Restructuring Company Even the most successful company can go through a crisis period when you have ...

  8. JavaScript Symbol

    创建: 2019/02/26 完成: 2019/02/26  生成  每次生成的值都不一样(===, ==都是) var sym = Symbol(); // 可以有参数, 是对symbol的说明 v ...

  9. 2019ICPC西安邀请赛 - B. Product - 数论

    打印的时候麻烦把:https://blog.csdn.net/skywalkert/article/details/50500009这个打印下来. 求\(\prod\limits_{i=1}^{n} ...

  10. MonogoDb的角色分类

    引用:  http://blog.csdn.net/kk185800961/article/details/45619863 https://docs.mongodb.org/manual/refer ...