洛谷P2448 无尽的生命 树状数组
给出231−12^{31}-1231−1范围的1−n1-n1−n的数列,然后有不超过k≤1e5k\leq1e5k≤1e5次交换,求问最终的逆序对的个数是多少。
被交换的值不超过2k2k2k个,然后再考虑中间一段连续的数对逆序对的贡献,把他们看作是同一个点。树状数组维护即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const ll INF=LONG_LONG_MAX;
const int N=2e5+7;
int x[N],y[N],tot=0;
int a[N],b[N];
ll t[N];
void add(int x,ll k) {for(int i=x;i<=tot;i+=i&(-i)) t[i]+=k;
}
ll query(int x) {ll sum=0;for(int i=x;i>0;i-=i&(-i)) sum+=t[i];return sum;
}
int main() {int n;scanf("%d",&n);for(int i=1;i<=n;i++) {scanf("%d%d",&x[i],&y[i]);a[++tot]=x[i];a[++tot]=y[i];}sort(a+1,a+1+tot);tot=unique(a+1,a+1+tot)-(a+1);for(int i=1;i<=tot;i++) b[i]=i;for(int i=1;i<=n;i++) {int l=lower_bound(a+1,a+1+tot,x[i])-a;int r=lower_bound(a+1,a+1+tot,y[i])-a;swap(b[l],b[r]); }ll ans=0;add(b[tot],1);for(int i=tot-1;i>0;i--) {ans+=1LL*(a[i+1]-a[i]-1)*query(i);add(i,a[i+1]-a[i]-1);ans+=query(b[i]-1);add(b[i],1);}printf("%lld\n",ans); return 0;
}
洛谷P2448 无尽的生命 树状数组相关推荐
- 洛谷2448 无尽的生命[树状数组 离散化]
题目描述 逝者如斯夫,不舍昼夜! 叶良辰认为,他的寿命是无限长的,而且每天都会进步. 叶良辰的生命的第一天,他有1点能力值.第二天,有2点.第n天,就有n点.也就是S[i]=i 但是调皮的小A使用时光 ...
- LOJ P2448 :无尽的生命 树状数组 + 离散化
传送门 分析 跟785E题意差不多,但是785E是在线求法,个人感觉更复杂一下 我们将需要操作的点进行离散化,这样就可以对这些点用树状数字求逆序对,同时还需要维护离散化后每两个点之间的数的逆序对的数量 ...
- 洛谷P3688/uoj#291. [ZJOI2017]树状数组
传送门(uoj) 传送门(洛谷) 这里是题解以及我的卡常数历程 话说后面那几组数据莫不是lxl出的这么毒 首先不难发现这个东西把查询前缀和变成了查询后缀和,结果就是查了\([l-1,r-1]\)的区间 ...
- 洛谷P3374 【模板】树状数组 1
题目链接:[模板]树状数组 1 - 洛谷 模板题就不多说了 ac代码: #include <cstdio> #include <iostream> #include <a ...
- 洛谷P3368 【模板】树状数组 2(Python和C++代码)
##就是常规写法 用树状数组维护一个差分数组的前缀和,因为可推得若b[i]=a[i]-a[i-1],则a[i]=b[1]+-+b[i] (b[1]=a[1]-a[0],a[0]=0) . 可发现a[i ...
- [洛谷P1908] 逆序对|归并排序|树状数组
题目描述 Description 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为&qu ...
- 洛谷 P1908 逆序对(树状数组+离散化)
题目描述 猫猫 TOM 和小老鼠 JERRY 最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计. 最近,TOM 老猫查阅到一个人类称之为"逆序对& ...
- 洛谷P2357 守墓人(差分+树状数组)
原题链接 什么是差分? 7 8 6 5 8 18 20 35 //原数组 7 1 -2 -1 3 10 2 15 //差分数组 差分数组的前缀sum[i]即原数组的a[i] 我们构建两个树状数组 su ...
- 洛谷 P5149 会议座位(树状数组+Trie)
题目是一道求逆序对的题目,但是我们先要将每一个名字转化为数字再进行计算 求逆序对的个数用树状数组或归并即可 题目有个坑点,名字包含大小写字母,所以字典树需要开大一点 #include <iost ...
最新文章
- 怎么写shell脚本才能不耍流氓?
- ASP.NET无刷新客户端回调
- NLP 解决方案是如何被深度学习改写的?
- Spring mvc PostgreSQL 插入timestamp和int8
- CentOS使用sudo提示用户不在sudoers文件中的解决方法
- ACM入门之【约数】
- 熊猫烧香演神话——在Windows mobile手机中运行
- 动态分区添加的新字段无法插入数据
- python实例 91,92,93,94
- 【转载】DXUT进阶
- html 动画过度转换的用法,css(动画,过渡,转换)
- 华为机试-字符串通配符
- springboot里面的porm配置问题
- Xshell串口连接
- Docker运维笔记-Docker端口映射
- RabbitMQ队列声明channel.queueDeclare()参数解析
- 如何将ppt批量转换成pdf?
- Playing Atari with Deep Reinforcement Learning
- 使用c语言实现三子棋游戏
- 微信小程序保险管理平台+后台管理系统