bzoj3289Mato的文件管理

bzoj3289Mato的文件管理

题意:

一共有n份资料,每天随机选一个区间[l,r],Mato按文件从小到大的顺序看编号在此区间内的这些资料。他先把要看的文件按编号顺序依次拷贝出来,再用排序程序给文件大小排序。求每天排序时的交换次数。

题解:

还是莫队,但是转移的时候用树状数组维护逆序对个数,总复杂度为O(nsqrt(n)log2n)。因为是从大到小插入的,所以维护时要用r-l+1减。

代码:

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cmath>
 5 #define inc(i,j,k) for(int i=j;i<=k;i++)
 6 #define lowbit(a) a&(-a)
 7 #define ll long long
 8 using namespace std;
 9
10 struct nd1{int x,y;};
11 bool cmp1(nd1 a,nd1 b){return a.x<b.x;}
12 struct nd2{int l,pl,r; ll ans; int id;};
13 bool cmp2(nd2 a,nd2 b){if(a.pl!=b.pl)return a.pl<b.pl; if(a.r!=b.r)return a.r<b.r; return a.l<b.l;}
14 bool cmp3(nd2 a,nd2 b){return a.id<b.id;}
15 ll c[100000],ans,l,r; int n,q,ls[100000],pos[100000]; nd1 f[100000]; nd2 ask[100000];
16 inline void add(int x,ll y){while(x<=n)c[x]+=y,x+=lowbit(x);}
17 inline ll query(int x){ll qy=0; while(x>=1)qy+=c[x],x-=lowbit(x); return qy;}
18 int main(){
19     scanf("%d",&n); inc(i,1,n)scanf("%d",&f[i].x),f[i].y=i; sort(f+1,f+n+1,cmp1);
20     inc(i,1,n)ls[f[i].y]=i; int sz=(int)sqrt(n); inc(i,1,n)pos[i]=(i-1)/sz+1;
21     scanf("%d",&q); inc(i,1,q){int a,b; scanf("%d%d",&a,&b); ask[i]=(nd2){a,pos[a],b,0,i};}
22     sort(ask+1,ask+1+q,cmp2); memset(c,0,sizeof(c)); ans=0; l=1; r=0;
23     inc(i,1,q){
24         while(r<ask[i].r){int x=r+1; x=n-ls[x]; ll a1=query(x); ans+=a1; add(x+1,1); r++;}
25         while(l>ask[i].l){int x=l-1; x=n-ls[x]; ll a1=(r-l+1)-query(x); ans+=a1; add(x+1,1); l--;}
26         while(r>ask[i].r){int x=r; x=n-ls[x]; ll a1=query(x); ans-=a1; add(x+1,-1); r--;}
27         while(l<ask[i].l){int x=l; x=n-ls[x]; ll a1=(r-l)-query(x); ans-=a1; add(x+1,-1); l++;}
28         ask[i].ans=ans;
29     }
30     sort(ask+1,ask+1+q,cmp3); inc(i,1,q)printf("%lld\n",ask[i].ans);
31     return 0;
32 }

20160408

时间: 2024-10-13 06:41:01

bzoj3289Mato的文件管理的相关文章

总结-数据结构

数据结构 1. 树状数组 写起来很方便, 用的比较多, 比线段树更实用吧. 虽然原理到现在不太清楚... 往往没有裸树状数组的题目, 往往和其他算法相结合. 单次修改或查询: O(logn) 1. BZOJ-2716-天使玩偶angel-CDQ分治 cdq分治 2. BZOJ-1878-HH的项链-SDOI2009 离线处理, 求种数 3. BZOJ-3289-Mato的文件管理-莫队+树状数组 莫队, 用树状数组统计逆序对 树状数组的弱点是不支持区间最大最小值什么的, 但是利用它可以统计前缀和

PHP文件管理—实现网盘以及压缩包的功能操作

代码如下: 1.主页面file_zip.php <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>文件管理</title> <script src="bootstrap/js/jquery-1.11.2.min.js"></script> </head> <style> *{ m

PHP服务器文件管理器开发小结(一):功能规划

为了更好的学习PHP.AJAX和LAMP等,为搭建PHP服务器打下基础,作者尝试开发一款基于PHP的服务器文件管理器,并且在管理过程中使用AJAX而不刷新页面. 文件管理器包含以下基本操作 当前文件夹 回到首文件夹 回到上一级文件夹 刷新文件夹视图 上传文件 新建文件 新建子文件夹 文件操作 查看内容 编辑内容 下载 重命名 移动 删除 文件夹操作 重命名 删除 基本上实现了以上功能后,一个比较完善的服务器文件管理器就形成了. 注意,本示例仅考虑Apache可操作的权限,不考虑提权的情况. 管理

SQL Server 2012笔记分享-54:数据库文件管理1

(一)添加文件 可以在线执行,不影响数据库使用 ,如图. 添加完成后,如图所示. 也可以通过脚本的形式来添加,如图. (二)删除文件 可以在线执行,不影响数据库使用 . 只有当文件中的实际使用空间为空时才能被成功执行 . (三)移动文件到不同的磁盘路径下 必须先将数据库脱机,将导致数据库暂时不可用 详情参考:http://msdn.microsoft.com/zh-cn/library/ms345483.aspx 若要将移动数据或日志文件作为计划的重定位的一部分,请执行下列步骤: 1. 运行以下

linux基础入门之文件管理类命令

文件管理类命令 命令和选项 command [options] [arguments] 命令      选项    参数 选项 短选项-   例(-h -l -a) 短选项可组合 例(-hla) 有些命令短选项可以不带-, 通常称作BSD风格的选项 例(ps aux ,tar xf) 有些选项需要带参数 tail -n 2 /etc/passwd 长选项不能组合 --help --list 如果需要参数 长选项的参数通常需要=号  --size=1G 命令后的参数就是命令的作用对象 例:ls /

文件管理

文件管理 #1.Linux文件系统层次结构 #2.绝对路径与相对路径 绝对路径:完全限定的名称,从根目录(/)开始查找,路径的写法"一定由根目录/写起". 相对路径:从当前所在目录开始查找,不会以/开头. 例如: /root/ 和/home/kiosk为绝对路径 usr/share和 Desktop为相对路径 #3.路径导航 pwd //显示当前所在目录 cd //更改或切换目录的命令 几个特殊的目录: . 代表此层目录 .. 代表上一层目录 - 代表前一个工作目录 ~ 代表"

初识linux文件管理

初识linux文件管理 1.文件系统与目录结构 文件系统从根目录 下开始,用"/". 以. 开头的文件为隐藏文件,路径分隔用/表示.文件系统的层级结构是LSB(linux standard base),遵循文件系统层级标准(FHS ) 文件命名规则:   文件名最长255个字节,包括路径名在内共4095个字节 蓝色–> 目录 绿色–> 可执行文件 红色–> 压缩文件 浅蓝色–> 链接文件 灰色–> 除了斜杠和NUL, 所有字符都有效,但不推荐使用特殊字符,

java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis

A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技术:313596790 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势D 集成安全

3-1 Linux文件管理类命令详解

根据马哥Linux初级 03-01整理 1. 目录管理 ls cd pwd mkdir rmdir tree 2. 文件管理 touch stat file rm cp mv nano 3. 日期时间 date clock hwclock cal 4. 查看文本(不可以查看二进制) cat.tac.more.less.head.tail cat:concatenate 链接并显示 cat后的参数,-n,后面不可以带数字 -E 显示$ -n 是显示序列号 tac : 是逆序显示 另外,中断某个命令