题目描述

逝者如斯夫,不舍昼夜!

叶良辰认为,他的寿命是无限长的,而且每天都会进步。

叶良辰的生命的第一天,他有1点能力值。第二天,有2点。第n天,就有n点。也就是S[i]=i

但是调皮的小A使用时光机,告诉他第x天和第y天,就可以任意交换某两天的能力值。即S[x]<-->S[y]

小A玩啊玩,终于玩腻了。

叶良辰:小A你给我等着,我有100种办法让你生不如死。除非能在1秒钟之内告知有多少对“异常对”。也就是说,最后的能力值序列,有多少对的两天x,y,其中x<y,但是能力值S[x]>S[y]?

小A:我好怕怕啊。

于是找到了你。

输入输出格式

输入格式:

第一行一个整数k,表示小A玩了多少次时光机

接下来k行,x_i,y_i,表示将S[x_i]与S[y_i]进行交换

输出格式:

有多少“异常对”

输入输出样例

输入样例#1:
复制

  1. 2
  2. 4 2
  3. 1 4
输出样例#1: 复制

  1. 4

说明

样例说明

最开始是1 2 3 4 5 6...

然后是 1 4 3 2 5 6...

然后是 2 4 3 1 5 6...

符合的对是[1 4] [2 3] [2 4] [3 4]

对于30%的数据,x_i,y_i <= 2000

对于70%的数据, x_i,y_i <= 100000

对于100%的数据, x_i.y_i <= 2^31-1 k<=100000

6024

题解:方法千篇一律,主要是自己在草稿纸上模拟一遍,才能领会其中精妙所在!

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int maxn=;
  5. int Hash[maxn<<],c[maxn<<],lsh[maxn<<];
  6. int cnt,top,n,m;
  7. pair<int,int>P[maxn];
  8. int lowbit(int x){return x&-x;}
  9. void update(int x,int v)
  10. {
  11. for(int i=x;i<=m;i+=lowbit(i))
  12. c[i]+=v;
  13. }
  14. ll sum(int x)
  15. {
  16. ll ans=;
  17. for(int i=x;i>=;i-=lowbit(i))
  18. ans+=c[i];
  19. return ans;
  20. }
  21. int main()
  22. {
  23. int k;
  24. cin>>k;
  25. for(int i=;i<=k;i++){
  26. cin>>P[i].first>>P[i].second;
  27. Hash[++cnt]=P[i].first;
  28. Hash[++cnt]=P[i].second;//先都放入Hash数组里,之后排序去重
  29. }
  30. sort(Hash+,Hash++cnt);
  31. m=unique(Hash+,Hash++cnt)-Hash-;
  32. for(int i=;i<=m;i++)lsh[i]=i;//记录原始状态
  33. for(int i=;i<=k;i++){
  34. int pos1=lower_bound(Hash+,Hash++m,P[i].first)-Hash;
  35. int pos2=lower_bound(Hash+,Hash++m,P[i].second)-Hash;
  36. swap(lsh[pos1],lsh[pos2]);//找到对应位置进行相应操作
  37. }
  38. ll ans=;
  39. for(int i=m;i>=;i--){
  40. ans+=sum(lsh[i]-);//单点求逆序对
  41. update(lsh[i],);//更新单点
  42. ll len=Hash[i]-Hash[i-]-;//求连续区间长度
  43. ans+=len*sum(i-);//连续的不变区间,可以将它看作 i 这个数!
  44. if(i!=)update(i-,len);//最后一个不用更新了(也不能更新,会在更新中死循环,因为0的lowbit是0)
  45. }
  46. cout<<ans<<endl;
  47. return ;
  48. }

P2448 无尽的生命(树状数组+离散化)的更多相关文章

  1. hdu4605 树状数组+离散化+dfs

    Magic Ball Game Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  2. BZOJ_5055_膜法师_树状数组+离散化

    BZOJ_5055_膜法师_树状数组+离散化 Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然 ...

  3. POJ 2299 【树状数组 离散化】

    题目链接:POJ 2299 Ultra-QuickSort Description In this problem, you have to analyze a particular sorting ...

  4. BZOJ-1227 虔诚的墓主人 树状数组+离散化+组合数学

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec Memory Limit: 259 MB Submit: 914 Solved: 431 [Submit][Statu ...

  5. POJ 2299 树状数组+离散化求逆序对

    给出一个序列 相邻的两个数可以进行交换 问最少交换多少次可以让他变成递增序列 每个数都是独一无二的 其实就是问冒泡往后 最多多少次 但是按普通冒泡记录次数一定会超时 冒泡记录次数的本质是每个数的逆序数 ...

  6. [HDOJ4325]Flowers(树状数组 离散化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4325 关于离散化的简介:http://blog.csdn.net/gokou_ruri/article ...

  7. Bzoj 1901: Zju2112 Dynamic Rankings 主席树,可持久,树状数组,离散化

    1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 6321  Solved: 2628[Su ...

  8. CF 61E 树状数组+离散化 求逆序数加强版 三个数逆序

    http://codeforces.com/problemset/problem/61/E 题意是求 i<j<k && a[i]>a[j]>a[k] 的对数 会 ...

  9. Ultra-QuickSort(树状数组+离散化)

    Ultra-QuickSort  POJ 2299 Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 50495   Accep ...

随机推荐

  1. (简单模拟)P1003 铺地毯

    题解: 从最后一个输入的数据开始排查,如果说你找到了这个点上面有地毯,那么就直接输出这个值,如果没找到就按照题干的意思输出-1. #include<iostream>#include< ...

  2. cf1208 D Restore Permutation (二分+树状数组)

    题意 让你构造一个长度为n的序列,记为p1……pn,(这个序列是1~n的全排列的一种) 给你n个数,记为s1……sn,si的值为p1……pi-1中小于pi的数的和. 思路 显然,应该倒着来,也就是从p ...

  3. part7 vuex实现数据共享

    vuex 是数据框架(一个插件)(单项数据的改变流程,组件改数据必须先调Action用dispatch方法) 大型项目vue只能承担视图层的主要内容 大量数据传递的时候,往往需要一个数据框架辅助 例子 ...

  4. POJ 2362:Square 觉得这才算深度搜索

    Square Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 21821   Accepted: 7624 Descripti ...

  5. Qt creator中配置opencv win7 64bit

    配置方法的原文来自https://www.librehat.com/qt-5-2-vs2012-opencv-2-4-7-dev-environment-setup-tutorial/. 补充,在张静 ...

  6. sql注入入门--基本命令

    本文转载自http://blog.csdn.net/zgyulongfei/article/details/41017493 本文仅献给想学习渗透测试的sqlmap小白,大牛请绕过. > > ...

  7. 吴裕雄--天生自然TensorFlow2教程:数学运算

    import tensorflow as tf b = tf.fill([2, 2], 2.) a = tf.ones([2, 2]) a+b a-b a*b a/b b // a b % a tf. ...

  8. Restful设计相关

    1.get,从服务器获取资源. 2.post 新增资源. 3.put 更新完整资源. 4.patch 更新部分资源. 5. delete 删除资源.

  9. Vue 源码学习(1)

    概述 我在闲暇时间学习了一下 Vue 的源码,有一些心得,现在把它们分享给大家. 这个分享只是 Vue源码系列 的第一篇,主要讲述了如下内容: 寻找入口文件 在打包的过程中 Vue 发生了什么变化 在 ...

  10. L0,L1,L2正则化浅析

    在机器学习的概念中,我们经常听到L0,L1,L2正则化,本文对这几种正则化做简单总结. 1.概念 L0正则化的值是模型参数中非零参数的个数. L1正则化表示各个参数绝对值之和. L2正则化标识各个参数 ...