传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3289

题目大意:Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号。为了防止他人偷拷,这些资料都是加密过的,只能用Mato自己写的程序才能访问。Mato每天随机选                一个区间[l,r],他今天就看编号在此区间内的这些资料。Mato有一个习惯,他总是从文件大小从小到大看资料。他先把要看的文件按编号顺序依次拷贝出来,再用他写的排序程序给文件大小排序。排序程序可以在1单                位时间内交换2个相邻的文件(因为加密需要,不能随机访问)。Mato想要使文件交换次数最小,你能告诉他每天需要交换多少次吗?

题解:莫队+树状数组+逆序对

代码:

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<cmath>
  5. #include<algorithm>
  6. #define maxn 100000
  7. using namespace std;
  8. int n,m;
  9. int pos[maxn],val[maxn],c[maxn],bo[maxn],ans[maxn*];
  10. struct data{
  11. int l,r,a,b,id;
  12. }a[maxn*];
  13. int read()
  14. {
  15. int x=; char ch; bool bo=;
  16. while (ch=getchar(),ch<''||ch>'') if (ch=='-') bo=;
  17. while (x=x*+ch-'',ch=getchar(),ch>=''&&ch<='') ;
  18. if (bo) return -x; return x;
  19. }
  20. int lowbit(int x){ return x&-x;
  21. }
  22. void add(int x,int v)
  23. {
  24. for (int i=x; i<=n; i+=lowbit(i)) c[i]+=v;
  25. }
  26. int query(int x)
  27. {
  28. int res=;
  29. for (int i=x; i; i-=lowbit(i)) res+=c[i];
  30. return res;
  31. }
  32. bool cmp(data a,data b)
  33. {
  34. if (pos[a.l]==pos[b.l])
  35. if (pos[a.l]&) return a.r<b.r;
  36. else return a.r>b.r;
  37. return pos[a.l]<pos[b.l];
  38. }
  39. void init()
  40. {
  41. n=read(),m=read();
  42. for (int i=; i<=n; i++) val[i]=read();
  43. for (int i=; i<=m; i++)
  44. {
  45. a[i].l=read(),a[i].r=read(),a[i].a=read(),a[i].b=read(); a[i].id=i;
  46. }
  47. int kk=int (sqrt(n));
  48. for (int i=; i<=n; i++) pos[i]=(i-)/kk+;
  49. sort(a+,a++m,cmp);
  50. }
  51. void updata(int k,int vval)
  52. {
  53. if (vval==-)
  54. {
  55. if (bo[val[k]]==) add(val[k],-);
  56. bo[val[k]]--;
  57. }
  58. else
  59. {
  60. if (!bo[val[k]]) add(val[k],);
  61. bo[val[k]]++;
  62. }
  63. }
  64. void work()
  65. {
  66. int r=,l=;
  67. for (int i=; i<=m; i++)
  68. {
  69. for (; r<a[i].r; r++) updata(r+,);
  70. for (; r>a[i].r; r--) updata(r,-);
  71. for (; l<a[i].l; l++) updata(l,-);
  72. for (; l>a[i].l; l--) updata(l-,);
  73. ans[a[i].id]=query(a[i].b)-query(a[i].a-);
  74. }
  75. for (int i=;i<=m; i++)
  76. printf("%d\n",ans[i]);
  77. }
  78. int main()
  79. {
  80. init();
  81. work();
  82. }

  

bzoj3289的更多相关文章

  1. 【bzoj3289】 Mato的文件管理

    http://www.lydsy.com/JudgeOnline/problem.php?id=3289 (题目链接) 题意 求区间逆序对 Solution 离线无修改查询,莫队转移:树状数组维护区间 ...

  2. BZOJ3289 Mato的文件管理(莫队+树状数组)

    这个做法非常显然. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib& ...

  3. 数据离散化 ( 以及 stl 中的 unique( ) 的用法 )+ bzoj3289:Mato的文件管理

    http://blog.csdn.net/gokou_ruri/article/details/7723378 ↑惯例Mark大神的博客   bzoj3289:Mato的文件管理 线段树求逆序对+莫队 ...

  4. 【BZOJ3289】Mato的文件管理 莫队算法+树状数组

    [BZOJ3289]Mato的文件管理 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是 ...

  5. [bzoj3289]Mato的文件管理_莫队_树状数组

    Mato的文件管理 bzoj-3289 题目大意:给定一个n个数的序列.m次询问:一段区间中的逆序对个数. 注释:$1\le n\,mle 5\cdot 10^4$. 想法: 开始想这个题的大佬们,给 ...

  6. [bzoj3289]Mato的文件管理

    Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的,只能用Mato自己写的程序才能 ...

  7. BZOJ3289 Mato的文件管理(莫队算法+树状数组)

    题目是区间逆序数查询. 莫队算法..左或右区间向左或右延伸时加或减这个区间小于或大于新数的数的个数,这个个数用树状数组来统计,我用线段树超时了.询问个数和数字个数都记为n,数字范围不确定所以离散化,这 ...

  8. bzoj3289 Mato的文件管理 莫队+树状数组

    求逆序对个数,莫队套树状数组 #include<cstdio> #include<iostream> #include<cstring> #include<c ...

  9. 【BZOJ3289】Mato的文件管理 莫队+树状数组

    题目大意:给定一个长度为 N 的序列,M 个询问,每次询问区间逆序对的个数. 题解:用树状数组加速答案转移. 代码如下 #include <bits/stdc++.h> #define f ...

随机推荐

  1. Linux 监控文件事件

    某些应用程序需要对文件或者目录进行监控,来侦测其是否发生了某些事件.Linux很贴心的为我们提供了inotify API,也是Linux的专有. inotify API 在使用之前一定要有一个inot ...

  2. 使用ReTrofit做缓存(结合上拉加载和下拉刷新)

    1. noCache 不使用缓存,全部走网络 2. noStore 不使用缓存,也不存储缓存 3. onlyIfCached 只使用缓存 4. maxAge 设置最大失效时间,失效则不使用 需要服务器 ...

  3. zf-关于荆州首页鼠标移动到导航栏上去触发的js 显示 问题解决办法

    是我copy代码的 时候 这个触发的属性没有修改,导致出现BUG,改成mopen('m2') 就好了

  4. 连接Oracle数据库的Hibernate配置文件

    连接Oracle数据库的Hibernate配置文件连接Oracle的Hibernate配置文件有两种格式,一种是xml格式的,另一种是Java属性文件格式的.下面分别给出这两种格式配置文件的代码. 1 ...

  5. JfreeCHart 异常:Chart image not found

    http://bbs.justep.com/thread-54775-1-1.html java.lang.IllegalArgumentException: Width (0) and height ...

  6. Win7+QTP10.0+IE9无法识别对象的解决方法

    在WIN7和IE9环境下使用QTP10,会出现识别不了web对象的情况,具体表现为:添加对象,先打开对象库,再打开IE,点击Add object to local 后,出现白色手指,将其拖拉到百度首页 ...

  7. 我的第一个Android项目之环境搭建

    开发IDE Android Studio2.0 + Genymotion + JDK1.8 网盘地址:http://pan.baidu.com/s/1kUSVqaN Android Studio 我的 ...

  8. eclipse proxy

    -Dorg.eclipse.ecf.provider.filetransfer.excludeContributors=org.eclipse.ecf.provider.filetransfer.ht ...

  9. Vmware克隆虚拟机后网卡eth0变eth1解决

    在克隆虚拟机的过程中,发现新克隆的机器的网卡由eth0变成了eth1,然而并没有eth1的配置文件. 1.#ip a 查看当前ip地址,发现是eth1网卡 2.#ll /etc/sysconfig/n ...

  10. Nagios简介

    Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警第 ...