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.pswp.cn/news/458969.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458969.shtml
英文地址,請注明出處:http://en.pswp.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…