codeforces540E-树状数组求逆序对
1-1e9的数据范围 但有1e5个区间 所以可以考虑把没有涉及到的区间缩成一个点 然后树状数组求逆序对
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
const int maxn=;
using namespace std;
typedef long long ll;
int n;
ll cnt;
ll ans;
ll tot;
vector<ll> seg;
map<ll,int> m;
struct node{
ll l,r;
}s[maxn+];
ll a[maxn+];
ll c[maxn+];
ll t[maxn+];
int lowbit(int x){
return x&(-x);
}
void add(int x,int y){
while(x<=cnt){
c[x]+=y;
x+=lowbit(x);
}
}
ll sum(int x){
ll res=;
while(x){
res+=c[x];
x-=lowbit(x);
}
return res;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%I64d%I64d",&s[i].l,&s[i].r);
seg.push_back(s[i].l);
seg.push_back(s[i].r);
}
unique(seg.begin(),seg.end());
sort(seg.begin(),seg.end());
for(size_t i=;i<seg.size();i++){
if(i==){
a[++cnt]=;
t[cnt]=cnt;
m[seg[i]]=cnt;
} else {
if(seg[i]-seg[i-]==){
a[++cnt]=;
m[seg[i]]=cnt;
t[cnt]=cnt;
} else {
a[++cnt]=seg[i]-seg[i-]-;
t[cnt]=cnt;
a[++cnt]=;
m[seg[i]]=cnt;
t[cnt]=cnt;
}
}
}
for(int i=;i<=n;i++){
int x=m[s[i].l];
int y=m[s[i].r];
swap(t[x],t[y]);
}
for(int i=;i<=cnt;i++){
tot+=a[i];
add(t[i],a[i]);
int temp=sum(t[i])-;
ans+=(tot-temp-)*a[i];
}
printf("%I64d\n",ans);
return ;
}
codeforces540E-树状数组求逆序对的更多相关文章
- POJ2299Ultra-QuickSort(归并排序 + 树状数组求逆序对)
树状数组求逆序对 转载http://www.cnblogs.com/shenshuyang/archive/2012/07/14/2591859.html 转载: 树状数组,具体的说是 离散化+树 ...
- [NOIP2013提高&洛谷P1966]火柴排队 题解(树状数组求逆序对)
[NOIP2013提高&洛谷P1966]火柴排队 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相 ...
- [NOI导刊2010提高&洛谷P1774]最接近神的人 题解(树状数组求逆序对)
[NOI导刊2010提高&洛谷P1774]最接近神的人 Description 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某 ...
- 【bzoj2789】[Poi2012]Letters 树状数组求逆序对
题目描述 给出两个长度相同且由大写英文字母组成的字符串A.B,保证A和B中每种字母出现的次数相同. 现在每次可以交换A中相邻两个字符,求最少需要交换多少次可以使得A变成B. 输入 第一行一个正整数n ...
- “浪潮杯”第九届山东省ACM大学生程序设计竞赛(重现赛)E.sequence(树状数组求逆序对(划掉))
传送门 E.sequence •题意 定义序列 p 中的 "good",只要 i 之前存在 pj < pi,那么,pi就是 "good": 求删除一个数, ...
- 2021.12.10 P5041 [HAOI2009]求回文串(树状数组求逆序对)
2021.12.10 P5041 [HAOI2009]求回文串(树状数组求逆序对) https://www.luogu.com.cn/problem/P5041 题意: 给一个字符串 \(S\) ,每 ...
- NOIP 2013 洛谷P1966 火柴排队 (树状数组求逆序对)
对于a[],b[]两个数组,我们应选取其中一个为基准,再运用树状数组求逆序对的方法就行了. 大佬博客:https://www.cnblogs.com/luckyblock/p/11482130.htm ...
- poj3067 Japan 树状数组求逆序对
题目链接:http://poj.org/problem?id=3067 题目就是让我们求连线后交点的个数 很容易想到将左端点从小到大排序,如果左端点相同则右端点从小到大排序 那么答案即为逆序对的个数 ...
- 牛客练习赛38 D 题 出题人的手环 (离散化+树状数组求逆序对+前缀和)
链接:https://ac.nowcoder.com/acm/contest/358/D来源:牛客网 出题人的手环 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他 ...
- HDU 1394 Minimum Inversion Number (树状数组求逆序对)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题目让你求一个数组,这个数组可以不断把最前面的元素移到最后,让你求其中某个数组中的逆序对最小是多 ...
随机推荐
- html5--1.11列表
html5--1.11列表 学习要点: 无序列表 有序列表 列表的属性 自定义列表 1.无序列表的基本格式 ul(unorder line)标签里面放li标签就好了,每一项就是一个li(LineIte ...
- win7 jdk1.7配置环境变量
1.安装目录,C:\Program Files\Java
- codeforces 610D D. Vika and Segments(离散化+线段树+扫描线算法)
题目链接: D. Vika and Segments time limit per test 2 seconds memory limit per test 256 megabytes input s ...
- AtCoder AGC #4 Virtual Participation
我好懒啊QAQ 老规矩 从C开始 C.给一个矩阵,里面有一些紫色方块,你需要涂两个矩阵,一个红色,一个蓝色,保证你涂的颜色四连通 然后把红色蓝色矩阵叠起来要求紫色的地方必须是紫色,其他地方不能是紫色 ...
- ACM学习历程—BestCoder 2015百度之星资格赛1002 列变位法解密(vector容器)
Problem Description 列变位法是古典密码算法中变位加密的一种方法,具体过程如下 将明文字符分割成个数固定的分组(如5个一组,5即为密钥),按一组一行的次序整齐排列,最后不足一组不放置 ...
- C# 深化基本概念
关于IDisposable的Dispose方法 .Net中GC会自动回收托管资源, 对于非托管资源应该使用Dispose方法. 在使用Dispose方法时,应注意避免在Dispose内部中继续释放托管 ...
- XCode工程中 Project 和 Targets区别
转自:http://blog.csdn.net/zhaozy55555/article/details/8557175 project就是一个项目,或者说工程,一个project可以对应多个targe ...
- Lagom学习 四 CompletionStage
Future: Java 8 之前的 Java 版本功能较弱,仅支持两种用法:要么检查 future 是否已经完成,要么等待 future 完成; Java 8 增加了 CompletableFutu ...
- Silverlight 5 系列学习之一
最近公司要用Silverlight 开发并且使用了5 ,以前只学过WPF 没看过Silverlight ,不过在争光中国看了看其概念原来如此.它只不过是轻量级的WPF,且目标在于跨浏览器及平台.费话少 ...
- 微信小程序开发之带搜索记录的搜索框
实现功能:点击搜索框,有搜索记录时以下拉菜单显示,点击下拉子菜单,将数据赋值到搜索框,点击搜索图标搜索,支持清空历史记录,可手动输入和清空查询关键字, UI: wxml: <!--查询历史记录数 ...