COGS 1144. [尼伯龙根之歌] 精灵魔法
★ 输入文件: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. [尼伯龙根之歌] 精灵魔法的更多相关文章
- 「杂烩」精灵魔法(P1908逆序对弱化版)
「杂烩」精灵魔法(P1908逆序对弱化版) 题面: 题目描述 \(Tristan\)解决了英灵殿的守卫安排后,便到达了静谧的精灵领地--\(Alfheim\) .由于$ Midgard$ 处在$ Al ...
- [题解](树形dp/换根)小x游世界树
2. 小x游世界树 (yggdrasi.pas/c/cpp) [问题描述] 小x得到了一个(不可靠的)小道消息,传说中的神岛阿瓦隆在格陵兰海的某处,据说那里埋藏着亚瑟王的宝藏,这引起了小x的好奇,但当 ...
- 天气预报API(二):全球城市、景点代码列表(“旧编码”)
说明 2016-12-10 补充 (后来)偶然发现中国天气网已经有城市ID列表的网页...还发现城市编码有两种,暂且称中国天气网这些编码为旧标准"旧编码"的特征是 9个字符长度; ...
- words2
餐具:coffee pot 咖啡壶coffee cup 咖啡杯paper towel 纸巾napkin 餐巾table cloth 桌布tea -pot 茶壶tea set 茶具tea tray 茶盘 ...
- 个人阅读作业Week17
个人阅读作业Week17 reading buaa software 解决的问题 这是提出问题的博客链接:http://www.cnblogs.com/SivilTaram/p/4830893 ...
- Oberon程序设计语言简介
Oberon奥伯龙是一种通用编程语言,也是一种同名操作系统(由Oberon语言开发,且参考过贝尔实验室的新一代网络操作系统Plan9),是由原Pascal程序设计语言的发明者Niklaus Wirth ...
- Chtholly Nota Seniorious
题目背景 大样例下发链接: https://pan.baidu.com/s/1nuVpRS1 密码: sfxg こんなにも.たくさんの幸せをあの人に分けてもらった だから.きっと 今の.私は 谁が何と ...
- 个人博客作业Week3(微软必应词典客户端的案例分析)
软件缺陷常常又被叫做Bug,即为计算机软件或程序中存在的某种破坏正常运行能力的问题.错误,或者隐藏的功能缺陷.缺陷的存在会导致软件产品在某种程度上不能满足用户的需要.IEEE729-1983对缺陷有一 ...
- M2 终审
1.团队成员简介 左边:马腾跃 右边:陈谋 左上:李剑锋 左下:仉伯龙 右:卢惠明 团队成员及博客: 李剑锋: Blog: http://www.cnblogs.com/Po ...
随机推荐
- StarUML中时序图
StarUML中时序图 在看时序图的例子的时候,发现有些的时序图上有小人的图标,可是一些UML工具却没有找到小人的图标,这让我很闹心,一直没解决,今天终于将该问题给解决了.解决这个问题来自于网上的一个 ...
- 重载和const形参的学习心得
在C++ primer 5th中,第6章的练习6.39(a)中,关于重载和const形参的学习心得. 练习6.39:说明在下面的每组声明中第二条声明语句是何含义.如果有非法的声明,请指出来. (a) ...
- Robot Framework基础学习(一)
Robot Framework语法学习: 一.变量的声明.赋值与使用 1.变量标识符:每个变量都可以用 变量标识符 ${变量名} 来表示. 2.变量声明:可以在TestSuite上点右键或者在Edi ...
- C - Present
C - Present Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit ...
- classpath 和 classpath*的 区别:
classpath 和 classpath*的 区别: classpath:只会到你指定的class路径中查找找文件; classpath*:不仅包含class路径,还包括jar文件中(class路径 ...
- UVa 10755 Garbage Heap (暴力+前缀和)
题意:有个长方体由A*B*C组成,每个废料都有一个价值,要选一个子长方体,使得价值最大. 析:我们暴力枚举上下左右边界,然后用前缀和来快速得到另一个,然后就能得到长方体,每次维护一个最小值,然后差就是 ...
- Maven虐我千百遍,我待Maven如初恋
前言 在如今的互联网项目开发当中,特别是Java领域,可以说Maven随处可见.Maven的仓库管理.依赖管理.继承和聚合等特性为项目的构建提供了一整套完善的解决方案,可以说如果你搞不懂Maven,那 ...
- lightoj1001【简单题】
题意: 一个人的值不能超过10: #include<stdio.h> #include<queue> #include<string.h> #include< ...
- laravel 路由设置
目录 routes\web.php 初始路由,直接渲染视图welcome,即V层 '/'为路径:www.xxx.com/ Route::get('/', function () { return ...
- Mol Cell Proteomics. |胡丹丹| 雷公藤红素通过SIRT1-FXR 信号通路保护胆汁淤积性肝损伤
期刊:Mol Cell Proteomics 题目:Celastrol protects from cholestatic liver injury though modulation of SIRT ...