Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块

3289: Mato的文件管理

Time Limit: 40 Sec  Memory Limit: 128 MB
Submit: 1539  Solved: 665
[Submit][Status][Discuss]

Description

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

Input

第一行一个正整数n,表示Mato的资料份数。
第二行由空格隔开的n个正整数,第i个表示编号为i的资料的大小。
第三行一个正整数q,表示Mato会看几天资料。
之后q行每行两个正整数l、r,表示Mato这天看[l,r]区间的文件。

Output

q行,每行一个正整数,表示Mato这天需要交换的次数。

Sample Input

4
1 4 2 3
2
1 2
2 4

Sample Output

0
2


HINT

 

Hint

n,q <= 50000

样例解释:第一天,Mato不需要交换

第二天,Mato可以把2号交换2次移到最后。

 

Source

By taorunz

 

题解:

多次查询,不修改,一看就是莫队。。。

每次交换相邻的元素,这不是逆序对吗。。。

于是,直接胡搞一个莫队+逆序对。。。

逆序对可以用树状数组维护,可以看一下我的上一篇博客http://www.cnblogs.com/Var123/p/5300334.html

Poj 2299就是求逆序对。(可以先做一下)

1A了很开心。。。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define MAXN 50010
 4 int N,sz[MAXN],color[MAXN],BIT[MAXN],pos[MAXN],ans1[MAXN];
 5 struct node
 6 {
 7     int l,r,id;
 8 }q[MAXN];
 9 int read()
10 {
11     int s=0,fh=1;char ch=getchar();
12     while(ch<'0'||ch>'9'){if(ch=='-')fh=-1;ch=getchar();}
13     while(ch>='0'&&ch<='9'){s=s*10+(ch-'0');ch=getchar();}
14     return s*fh;
15 }
16 bool cmp(node aa,node bb)
17 {
18     if(pos[aa.l]==pos[bb.l])return aa.r<bb.r;
19     return aa.l<bb.l;
20 }
21 int Lowbit(int o){return o&(-o);}
22 void Update(int o,int o1)
23 {
24     while(o<=N)
25     {
26         BIT[o]+=o1;
27         o+=Lowbit(o);
28     }
29 }
30 int Sum(int o)
31 {
32     int sum=0;
33     while(o>0)
34     {
35         sum+=BIT[o];
36         o-=Lowbit(o);
37     }
38     return sum;
39 }
40 int main()
41 {
42     int L,R,Q,i,ans,block,wz,tot;
43     N=read();
44     for(i=1;i<=N;i++)sz[i]=read(),color[i]=sz[i];
45     sort(sz+1,sz+N+1);
46     tot=unique(sz+1,sz+N+1)-(sz+1);
47     block=(int)sqrt(N);
48     Q=read();
49     for(i=1;i<=Q;i++)
50     {
51         q[i].l=read();q[i].r=read();q[i].id=i;
52     }
53     for(i=1;i<=N;i++)pos[i]=(int)(i-1)/block+1;
54     L=1;R=0;memset(BIT,0,sizeof(BIT));
55     sort(q+1,q+Q+1,cmp);
56     ans=0;
57     memset(ans1,0,sizeof(ans1));
58     for(i=1;i<=Q;i++)
59     {
60         while(L<q[i].l)
61         {
62             wz=lower_bound(sz+1,sz+tot+1,color[L])-sz;
63             Update(wz,-1);
64             ans-=Sum(wz-1);
65             L++;
66             //Update(wz,-1);
67         }
68         while(L>q[i].l)
69         {
70             L--;
71             wz=lower_bound(sz+1,sz+tot+1,color[L])-sz;
72             ans+=Sum(wz-1);
73             Update(wz,1);
74         }
75         while(R<q[i].r)
76         {
77             R++;
78             wz=lower_bound(sz+1,sz+tot+1,color[R])-sz;
79             ans+=(Sum(N)-Sum(wz));
80             Update(wz,1);
81         }
82         while(R>q[i].r)
83         {
84             wz=lower_bound(sz+1,sz+tot+1,color[R])-sz;
85             ans-=(Sum(N)-Sum(wz));
86             Update(wz,-1);
87             R--;
88         }
89         ans1[q[i].id]=ans;
90     }
91     for(i=1;i<=Q;i++)printf("%d\n",ans1[i]);
92     return 0;
93 }
View Code

 

转载于:https://www.cnblogs.com/Var123/p/5300860.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux头文件 库,Linux操作系统的头文件和库文件搜索路径

一、 头文件1 “”中的头文件&#xff0c;在源文件当前目录查找2 -I 中指定目录 -I可以在CFLAG中指定3 gcc的环境变量 C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJC_INCLUDE_PATH4 编译器预设路径、内定目录&#xff1a;/usr/include/usr/local/include/usr/lib/gcc-lib/i386-lin…

vs2010创建和使用动态链接库(dll)

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 本文将创建一个简单的动态链接库&#xff0c;并编写一个应用台控制程序使用该动态链接…

通用二进制

通用二进制 通用二进制&#xff08;Universal binary&#xff09;是苹果电脑公司提出的一种程序代码&#xff0c;使程序能以本地程序的形式运行在使用PowerPC或者英特尔微处理器&#xff08;x86&#xff09;的麦金塔电脑上&#xff0c;在同一个程序包中同时为两种架构提供最理想…

Python~win32com~Excel

import win32com.client#wwin32com.client.Dispatch("Word.Application") #w.Visible1owin32com.client.Dispatch("Excel.Application") o.Visible1 o.Workbooks.Add() o.Cells(1,1).Value"Hello"转载于:https://www.cnblogs.com/lynclynn/p/530…

linux显示光盘命令行,使用wodim在命令行下烧录光盘

使用wodim在命令行下烧录光盘发布时间:2009-02-27 16:23:11来源:红联作者:zhania作者&#xff1a;linuxtoy出自http://linuxtoy.org/archives/burning-cd-with-wodim.html我们以前介绍的 Linux 光盘烧录工具多为图形化的程序&#xff0c;今天来看看如何使用 wodim 在命令行下烧…

Android(java)学习笔记144:网络图片浏览器的实现(ANR)

1.我们在Android下&#xff0c;实现使用http协议进行网络通信&#xff0c;请求网络数据。这里是获取网络上的图片信息&#xff0c;让它可以显示在手机上&#xff1b; 但是我们这个手机连接网络是很费时间&#xff0c;如果我们在主线程&#xff08;UI线程&#xff09;中写这个网…

DLL导出函数名称改编的解决方法

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 1.DLL编译后导出函数名称改变 在编写一个DLL后&#xff0c;为了能被别的程序调用&…

组合自定义控件的步骤详解

Android 步骤&#xff1a; 1 自定义组合控件的布局settint_view.xml<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"vertical"and…

linux如何建立隐藏目录,【Linux】文件与目录的默认权限与隐藏权限

01. 文件默认权限&#xff1a;umask文件的权限可以使用chmod来改变&#xff0c;但是我们默认创建文件的权限是什么&#xff1f;那就是与umask这个有关了。下来我们学习这个指令1.1 简单使用umask[rootiZbp13q6hd8z3xaagcmz6gZ /]# umask0022[rootiZbp13q6hd8z3xaagcmz6gZ /]# u…

Servlet和JSP学习指导与实践(二):Session追踪

前言&#xff1a; web应用中经常需要对某些有用的信息进行存储或者附加一些信息。本文主要介绍session&#xff0c;即“会话”跟踪的几种不同方式~ ----------------------------4种管理session的方式&#xff1a; 1.重写url 通过在请求的url后面追加参数信息进行会话跟踪。如&…

数据存储和界面展示(二)

#测试 黑盒测试 测试逻辑业务 白盒测试 测试逻辑方法 根据测试粒度 方法测试&#xff1a;function test 单元测试&#xff1a;unit test 集成测试&#xff1a;integration test 系统测试&#xff1a;system test 根据测试暴力程度 冒烟测试&#xff1a;smoke test 压力测…

linux在A目录下创建B文件,Linux课程---5、常用文件命令和目录命令(创建文件命令)...

Linux课程---5、常用文件命令和目录命令(创建文件命令)一、总结一句话总结&#xff1a;touch file11、管道符|有什么用&#xff1f;将前一个命令的结果作为后一个命令的输入&#xff1a;比如查看文件前3行&#xff1a;cat file1 | head -32、linux下如何复制粘贴命令是什么&…

window 系统上传文件到linux 系统出现dos 格式换行符

Windows里的文件在Unix/Mac下打开的话&#xff0c;在每行的结尾可能会多出一个^M符号&#xff0c;Unix/Mac系统下的文件在Windows里打开的话&#xff0c;所有文字会变成一行&#xff0c;所以为了避免这种情况的发生&#xff0c;我们可以在linux系统内转换格式 Centos系列可以直…

#pragma once与 #ifndef的区别

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 为了避免同一个文件被include多次 1 #ifndef方式2 #pragma once方式 在能够支持这…

android学习者优秀网址推荐

非常漂亮的android UI库集合&#xff0c;别人整理的&#xff0c;如果感觉不错&#xff0c;赶快收藏吧&#xff01;&#xff01; https://github.com/wasabeef/awesome-android-ui https://github.com/Trinea/android-open-project android中文社区网 http://www.android-studio…

linux while read文件,linux shell脚本用while read逐行读取文本的问题

问题:我现在是想用一个脚本获取一定列表服务器的运行时间。首先我建立一个名字为ip.txt的IP列表(一个IP一行)&#xff0c;再建好密钥实现不用密码直接登录。然后写脚本如下&#xff1a;#!/bin/bashwhile read ips;doecho $ips;done < ip.txt脚本实现了逐行读取列表中的IP&am…

常用字符串处理函数汇总

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** (一)strcmp函数 strcmp函数是比较两个字符串的大小,返回比较的结果。一般形式是&…

兼容性记录-class属性

getAttribute获得class属性时,IE6,IE7的传參是className,IE7和现代游览器都是class全部游览器DOMElement均有的className属性,其在IE各版本号下的均表现良好返回属性class值的字符串此外html5中DOMElement有个classList属性,它返回一个类型为DOMTokenList的对象,它当中有非常多…

magenta内核与linux,谷歌将推出新操作系统Fuchsia:Magenta语言为内核

谷歌现在研发出来并且推出使用的系统有Chrome OS、Android和Chromecasts&#xff0c;这三者在操作系统的市场中占得份额很高&#xff0c;但是好像谷歌对此并不满意&#xff0c;因为有相关消息显示&#xff0c;谷歌正在研发新的操作系统Fuchsia&#xff0c;该系统采用Magenta语言…

BZOJ 1968: [Ahoi2005]COMMON 约数研究 水题

1968: [Ahoi2005]COMMON 约数研究 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id1968 Description Input 只有一行一个整数 N&#xff08;0 < N < 1000000&#xff09;。 Output 只有一行输出&#xff0c;为整数M…