【Codeforces Round #301 (Div. 2) E】Infinite Inversions
【链接】 我是链接,点我呀:)
【题意】
给你一个无限长的序列1,2,3,4...
然后给你n个操作.
每个操作ai,bi;
表示调换位置为ai和位置为bi的数的位置。
(ai,bi
【题解】
肯定和数据结构相关的。
那么大,首先离散化一下。
然后用离散化后的数字来模拟这个swap的过程。
这样,就能够获取出有操作过的数之间的大小关系了。
然后用树状数组来处理这些"有操作过的数字"的逆序对。
但是还不够。
因为可能还有一些数字虽然没有经过处理。但仍然对逆序对有贡献。
也即位置为i的被操作过的数字,它原来的位置pos.
那么这里对逆序对有贡献的数字,即i..pos这一段中没有操作过的数字。(这里假设ipos也成立。
所以再处理出两个处理过的数字之间没有处理过的数字的前缀和就好了。
这样的话就能够快速的获取任意两个位置之间没有操作过的数字的和了。
写题的时候,一直在想着要怎么在线处理。
但实际上这一题并不需要在线处理,只要操作之后知道答案就可以了。
不用什么非常高级的数据结构。
【代码】
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e5;
int n,num;
pair <int,int> a[N+10];
int X[N*2+10],val[N*2+10],pre[N*2+10];
struct BI {
int a[2*N + 10];
int lowbit(int x) {
return x&(-x);
}
void add(int x,int y) {
while (x <= 2*N) {
a[x] += y;
x += lowbit(x);
}
}
int sum(int x) {
int now = 0;
while (x > 0) {
now += a[x];
x -= lowbit(x);
}
return now;
}
int get_sum(int l, int r) {
return sum(r) - sum(l - 1);
}
}b;
int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "rt", stdin);
#endif
scanf("%d",&n);
for (int i = 1;i <= n;i++){
scanf("%d%d",&a[i].first,&a[i].second);
X[++num] = a[i].first;
X[++num] = a[i].second;
}
sort(X+1,X+1+num);
num = unique(X+1,X+1+num) - X - 1;
// printf("%d\n",num);
for (int i = 1;i <= num;i++) val[i] = X[i];
for (int i = 1;i <= num;i++) pre[i] = pre[i-1] + X[i] - X[i-1] - 1;
for (int i = 1;i <= n;i++){
int x = lower_bound(X+1,X+1+num,a[i].first) - X;
int y = lower_bound(X+1,X+1+num,a[i].second) - X;
swap(val[x],val[y]);
}
ll ans = 0;
for (int i = 1;i <= num;i++){
int pos = lower_bound(X+1,X+1+num,val[i])-X;
/*
printf("now=%d pos=%d temp2 = %d\n",i,pos,abs(pre[pos]-pre[i]));
puts("");
*/
ans += b.get_sum(pos,num);
ans += abs(pre[pos]-pre[i]);
b.add(pos,1);
}
printf("%lld\n",ans);
return 0;
}
【Codeforces Round #301 (Div. 2) E】Infinite Inversions的更多相关文章
- 【Codeforces Round #301 (Div. 2) D】 Bad Luck Island
[链接] 我是链接,点我呀:) [题意] 剪刀.石头.布各有r,s,p个生活在同一个村子里. 它们两两之间相遇的几率都相同(相遇后就会按照划拳的规则判断输赢,输的人就死掉了). 问你最后只剩下剪刀,只 ...
- 【Codeforces Round #301 (Div. 2) C】 Ice Cave
[链接] 我是链接,点我呀:) [题意] 给你一个n*m的地图. 每个地图为0的时候可以安全走过,且走过后变成1. (一定要离开之后才会变成1) 而为1的则走过之后会掉入下一层. 你一开始在初始位置( ...
- 【Codeforces Round #301 (Div. 2) B】 School Marks
[链接] 我是链接,点我呀:) [题意] 已知k门成绩. 总共有n门成绩. 让你构造剩下的n-k门成绩,使得这n门成绩的中位数>=y,并且这n门成绩的和要小于等于x. n为奇数 [题解] 首先判 ...
- 【Codeforces Round #301 (Div. 2) A】 Combination Lock
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟水题 [代码] #include <bits/stdc++.h> using namespace std; cons ...
- 【Codeforces Round #432 (Div. 1) B】Arpa and a list of numbers
[链接]h在这里写链接 [题意] 定义bad list是一个非空的.最大公约数为1的序列.给定一个序列,有两种操作:花费x将一个元素删除.花费y将一个元素加1,问你将这个序列变为good list所需 ...
- 【Codeforces Round #420 (Div. 2) C】Okabe and Boxes
[题目链接]:http://codeforces.com/contest/821/problem/C [题意] 给你2*n个操作; 包括把1..n中的某一个数压入栈顶,以及把栈顶元素弹出; 保证压入和 ...
- 【Codeforces Round #420 (Div. 2) B】Okabe and Banana Trees
[题目链接]:http://codeforces.com/contest/821/problem/B [题意] 当(x,y)这个坐标中,x和y都为整数的时候; 这个坐标上会有x+y根香蕉; 然后给你一 ...
- 【Codeforces Round #420 (Div. 2) A】Okabe and Future Gadget Laboratory
[题目链接]:http://codeforces.com/contest/821/problem/A [题意] 给你一个n*n的数组; 然后问你,是不是每个位置(x,y); 都能找到一个同一行的元素q ...
- 【Codeforces Round #423 (Div. 2) C】String Reconstruction
[Link]:http://codeforces.com/contest/828/problem/C [Description] 让你猜一个字符串原来是什么; 你知道这个字符串的n个子串; 且知道第i ...
随机推荐
- javescript定时器demo
本来认为这个事情还是挺easy的不值得写上去,今天同事突然问我.我心想曾经写过,可是就是想不起函数的名称的,于是翻了一下原来的代码. function run() { interval = setIn ...
- 菜鸟nginx源代码剖析数据结构篇(七) 哈希表 ngx_hash_t(下)
菜鸟nginx源代码剖析数据结构篇(七) 哈希表 ngx_hash_t(下) Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:B ...
- nagios插件之登陆防火墙实现session监控
ssh_firewall_session.sh -- 登陆防火墙并运行dis session statistics firewall_check_sessions.c -- 调用上面脚本.过滤出ses ...
- java一个月日历
项目须要,获取当天之后的30天.并提示星期几(周几),写了一个工具类 /** * 计算日期时间 * @author shijing * 2015年8月10日下午2:16:09 * @param dat ...
- Json技术
JSON语法是一种用于传输和生成数据的协定,很类似于C家族的语言,所以很容易被C家族的语言所解析.对象:对象包含再{}之间属性:采用Key-Value对来表示.属性之间使用逗号分开. string ...
- win7中下mysql-5.6.22免安装配置
windows下mysql免安装配置 1. 下载mysql免安装压缩包 下载mysql-5.6.22-winx64.zip 解压到本地D:\mysql-5.6.22-winx64 2. 修改配置文件 ...
- Zabbix + Grafana
Grafana 简介 Grafana自身并不存储数据,数据从其它地方获取.需要配置数据源 Grafana支持从Zabbix中获取数据 Grafana优化了图形的展现,可以用来做监控大屏 Grafana ...
- CDH版本大数据集群下搭建Avro(hadoop-2.6.0-cdh5.5.4.gz + avro-1.7.6-cdh5.5.4.tar.gz的搭建)
下载地址 http://archive.cloudera.com/cdh5/cdh/5/avro-1.7.6-cdh5.5.4.tar.gz
- 分享一个vue常用的ui控件
vue学习文档 http://www.jianshu.com/p/8a272fc4e8e8 vux github ui demo:https://github.com/airyland/vux M ...
- Kinect 开发 —— 引言
自然人机交互设计技术 (全息三维投影,手势肢体识别,眼动跟踪 ...) 符合人类心理的交互方式 自然用户界面 —— Natural User Interface 有机用户界面 —— Organic U ...