题目链接

燃烧的远征

题目描述:

为了抵御托伦星人的进攻,Hammerhead的母公司,腐朽的星际托拉斯GTD的CEO TS派出了保安舰队的主力远征,并选拔出了GTD精英组成的小队前往战地前沿作战。据CEO了解到的情报,托伦星人的首领——叫兽•杨拥有一种叫做“电击”的可怕技能,此技能能够在瞬间置人于死地。谢天谢地的是,GTD众信仰两个神:C神和Z神。对C神的特别忠诚的能够死后原地复活,信仰越坚定,复活后状态恢复得越满;对Z神的特别忠诚的能够利用高分贝噪音对叫兽•杨进行攻击,信仰越坚定,伤害输出越高。
在C神和Z神的庇佑下,GTD精英小队对托伦星人展开了作战。
这场燃烧的远征是否会由GTD取得最后的胜利呢?又或者由于叫兽•杨的可怕能力,末日的回响响个没完,这场战争终会历时千年呢?

对精英小队的所有队员(一共N名),CEO按照他们对C神和Z神忠诚度进行了两个评分。对C神最忠诚的评分为\(N\),第二忠诚的为\(N-1\)……最不忠诚的评分为1。对Z神的忠诚程度也按照这样的标准进行评分。
CEO决定先挑选两人作为先锋对叫兽•杨进行攻击。为了保证队伍的平衡性,CEO要求两人小队的成员应该要满足这样的条件:如果某位成员对C神的忠诚度高于另一位,则他对Z神的忠诚度必须要低于另一位;如果某位成员对C神的忠诚度低于另一位,则他对Z神的忠诚度必须要高于另一位。
现在,CEO希望找出一共有多少种可能的选择。

输入格式:

文件输入。输入文件名tbc.in
输入第一行为\(N\),即小队成员总数。
接下来的\(N\)行,每行两个数表示每个成员的忠诚度——第一个数为对C神的忠诚度,第二个数为对Z神的忠诚度。

输出格式:

文件输出。输出文件名tbc.out
输出仅一行,为符合条件的两人组合的总数。

样例输入:

5
5 4
3 2
4 3
1 5
2 1

样例输出:

4

数据范围:

对50%的数据,\(N≤1000\)
对100%的数据,\(N≤100000\)

时间限制:

2s

提示:

可能的组合有:
第一位(5 4)和第四位(1 5)
第二位(3 2)和第四位(1 5)
第三位(4 3)和第四位(1 5)
第四位(1 5)和第五位(2 1)

【特别感谢】
乔•霍尔德曼:《千年战争》
玻璃渣:山口山
Ural:acm.timus.ru
GTD:众人

题解

题意是有\(N\)个人,每个人有两个数值,先暂且设这两个数为\(x\)和\(y\)
要求找出两个人,使得\(x_1>x_2\)且\(y_1<y_2\),
这不就是求逆序对的个数吗。
众所周知,我们可以先把所有人按照\(x\),从小到大排序,然后用msort求逆序对的个数。
如何用msort求逆序对我就不详解了,大家可以看代码理解。
注意这里\(N\)的取值范围是\(N≤100000\),而逆序对的个数的数量级是\(N^2\)的,所以\(ans\)需要用\(long long\)才存的下。
时间复杂度为\(O(NlogN)\)
msort求逆序对:

#include<bits/stdc++.h>
using namespace std;
int n,x,y;
long long ans;
int a[100009];
void msort(int l,int r){if(l==r) return;int mid=(l+r)/2;msort(l,mid);msort(mid+1,r);int j=l,i=mid+1;while(j<=mid || i<=r){while(j>mid && i<=r)i++;if(j>mid && i>r) break;while(j<=mid && i>r)j++;if(j>mid && i>r) break;if(a[j]<=a[i]) j++;else{ans+=mid-j+1;i++;}}sort(a+l,a+r+1);
}
int main(){scanf("%d",&n);for(int j=1;j<=n;j++){scanf("%d%d",&x,&y);a[x]=y;}msort(1,n);printf("%lld",ans);return 0;
}

其实求逆序对的方法不止有用msort求这一种,
利用树状数组我们也可以实现求逆序对。
我们可以先把所有人按照\(x\)从大到小排序,(这里从大到小是为了后面加入数时方便一点,如果这里从小到大,后面可以倒着加入每个数)
我们从1到\(N\)依次加入每个人,
每次我们在树状数组上把\(a[y]++\),
在加入每个数之前我们求\(y-1\)的前缀和加到\(ans\)里。
树状数组求逆序对的时间复杂度也是\(O(NlogN)\)
树状数组求逆序对:

#include<bits/stdc++.h>
using namespace std;
int n,x,y;
long long ans;
struct aa{int x,y;
}a[100009];
int p[400009];
bool cmp(aa x,aa y){return x.x>y.x;
}
int lb(int x){return x&(-x);
}
void add(int x){int u=x;while(u<=400000){p[u]++;u+=lb(u);}
}
int fd(int x){int ans=0;while(x){ans+=p[x];x-=lb(x);}return ans;
}
int main(){scanf("%d",&n);for(int j=1;j<=n;j++)scanf("%d%d",&a[j].x,&a[j].y);sort(a+1,a+n+1,cmp);for(int j=1;j<=n;j++){ans+=fd(a[j].y);add(a[j].y);}printf("%lld",ans);return 0;
}

转载于:https://www.cnblogs.com/linjiale/p/11317703.html

【XJOI】燃烧的远征相关推荐

  1. XJOI 3585 The rescue plan 营救计划 题解

    英文 Time Limit:1s Memory Limit:256M Description Given a n*m map.A "Mengxin" is trapped.You ...

  2. [XJOI]最大K段和 题解

    题目:XJOI335 传送门 [ >XJOI< ] 重要提示:您的膜法等级必须达到3级6段才可使用本传送门,否则您会被小猫痛扁 因为博主太懒,不提供题面(QAQ)... 很容易想到使用DP ...

  3. XJOI 3266 Dyeing 染色 题解

    英文 Time Limit:1s Memory Limit:256M Description N grid in a line.Using three colour(red,pink and gree ...

  4. 燃烧的远征java(一)-开发环境:JDK1.6+tomcat5.5

    由于项目的需要,现在正式开始java学习之旅,以后的各期中我将学习过程产生的问题和心得发表在此,所发表的观点仅代表个人观点,如果有不正确的地方,望不吝赐教. 在学习过程中,可能需要查阅很多资料,我会对 ...

  5. 魔兽世界燃烧的远征最新服务器,6月2日加入“燃烧的远征” 立刻了解《魔兽世界》经典怀旧服的服务器抉择...

    在诅咒之地的黑暗之门彼岸,有一个被燃烧军团的阴谋诡计撕碎的国度:外域,这里曾经是兽人们美丽的家园"德拉诺"."燃烧的远征"将于北京时间6月2日于全球上线,一同探 ...

  6. XJOI 3404 刷油漆 题解

    时间:1s 空间:128M 题目描述: 从1到n有n块砖需要刷油漆,砖的编号被a整除的要被刷成红色,被b整除的被刷成蓝色,同时被a,b整除的既可以被刷成红色,也可以被刷成蓝色.等你刷完后,对于每块红色 ...

  7. XJOI——3566-萌新关爱之-鹦鹉学整数

    - >>>XJOI--3545-你好,OI<<< >>>XJOI--3566-萌新关爱之-鹦鹉学整数<<< >>&g ...

  8. XJOI——3569-萌新关爱之-C语言的余数

    - >>>XJOI--3545-你好,OI<<< >>>XJOI--3566-萌新关爱之-鹦鹉学整数<<< >>&g ...

  9. XJOI 3629 非严格次小生成树(pqq的礼物)

    题目描述: 有一天,pqq准备去给×i×准备礼物,他有一些礼品准备包装一下,他用线将这些礼物连在一起,不同的礼物因为风格不同所以连接它们需要不同价值的线.风格差异越大,价格越大(所以两个礼物之间只有一 ...

  10. [XJOI]noip44 T3还有这种操作

    还有这种操作 ttt 最近在学习二进制, 他想知道小于等于N的数中有多少个数的二进制表示中有偶数个1. 但是他想了想觉得不够dark,于是他增加了若干次操作,每次操作会将一个区间内的0变1 , 1变0 ...

最新文章

  1. 浏览器ERR_PROXY_CONNECTION_FAILED解决方法
  2. Go 语言编程 — defer 关键字
  3. 互联网1分钟 |1224
  4. js 语法:JSON.stringify(data, null, 4)
  5. 使用蚂蚁借呗会影响房贷申请吗?
  6. 宇宙最強的IDE - Visual Studio 25岁生日快乐
  7. Thinkphp5.0 阿里云OSS扩展类上传示例(轮子)
  8. 缓冲池java_了解Java缓冲池
  9. mongodb 权限设置--用户名、密码、端口
  10. java 捕获 nullpointerexception,Java 空检查链与捕获NullPointerException
  11. XCODE GDB这个是老版本xcode,新版的是lldb
  12. mysql truncate耗时_线上MySQL 32G大小的表truncate所消耗的时间为2分钟,快还是慢?...
  13. uniapp打开pdf文件
  14. UE4入门序列08(Unreal制作MMO游戏范围巡逻AI)
  15. 【CSS3】 CSS3实现“图片阴影”效果
  16. python 爬取腾讯漫画
  17. [OHIF-Viewers]医疗数字阅片-医学影像-使用 PropTypes 进行类型检查
  18. 中国颅骨固定系统行业市场供需与战略研究报告
  19. 三、nginx服务的nginx.conf的参数配置解析
  20. Word里表格跨页时自动断开,表格后留有空白部分,未布满整页,如何操作让表格上下页均匀布满?

热门文章

  1. 中兴手机数据通道打不开_中兴RRU故障排查指导手册
  2. MFC简易RTF编辑器
  3. BIOS知识枝桠——PCD
  4. 安全合规/法案--34--《APP违法违规收集使用个人信息行为认定方法》原文及解读
  5. [转]30个总结JVM虚拟机的技术文排版好(收藏版)
  6. linux 查看开机启动项
  7. 简述MES系统的9大核心功能模块
  8. linux数字版权管理,数字版权管理系统 DRM
  9. 企业网站开发需要注意什么事项?
  10. “此电话号码无法用于进行验证”的解决方法