Mato的文件管理 HYSBZ - 3289

Mato的文件管理

HYSBZ - 3289

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <algorithm>
 5 #include <iostream>
 6 using namespace std;
 7 const int maxn = 50010;
 8 struct Qry{
 9     int l, r, pos, id;
10     bool operator < (const Qry &a)const {
11         if(pos == a.pos) return r < a.r;
12         return pos < a.pos;
13     }
14 }q[maxn];
15 int res[maxn];
16 struct BIT{
17     int n, c[maxn];
18     inline void init(int _n){
19         n = _n;
20         memset(c, 0, sizeof c);
21     }
22     inline void add(int i, int v){
23         for(; i <= n; i += i & -i) c[i] += v;
24     }
25     inline int sum(int i){
26         int res = 0;
27         for(; i; i -= i & -i){
28             res += c[i];
29         }
30         return res;
31     }
32     inline int sum(int l, int r){
33         return sum(r) - sum(l - 1);
34     }
35 }bit;
36 int ans;
37 int a[maxn], mp[maxn];
38 void solve(int n, int m){
39     int l = 1, r = 0;
40     ans = 0;
41     for(int i = 0; i < m; i++){
42         while(l < q[i].l) ans -= bit.sum(1, a[l] - 1), bit.add(a[l], -1), l++;
43         while(l > q[i].l) l--, ans += bit.sum(1, a[l] - 1), bit.add(a[l], 1);
44         while(r > q[i].r) ans -= bit.sum(a[r] + 1, n), bit.add(a[r], -1), r--;
45         while(r < q[i].r) r++, ans += bit.sum(a[r] + 1, n), bit.add(a[r], 1);
46         res[q[i].id] = ans;
47     }
48 }
49 int n;
50 int BIN(int x){
51     int l = 1, r = n;
52     while(l <= r){
53         int m = l + r >> 1;
54         if(x < mp[m]) r = m - 1;
55         else if(x == mp[m]) return m;
56         else l = m + 1;
57     }
58 }
59 int main(){
60     while(scanf("%d", &n) != EOF){
61         bit.init(n);
62         int SZ = sqrt(n * 1.0);
63         for(int i = 1; i <= n; i++){
64             scanf("%d", &a[i]);
65             mp[i] = a[i];
66         }
67         sort(mp + 1, mp + n + 1);
68         for(int i = 1; i <= n; i++) a[i] = BIN(a[i]);
69         int m;
70         scanf("%d", &m);
71         for(int i = 0; i < m; i++){
72             scanf("%d %d", &q[i].l, &q[i].r);
73             q[i].id = i;
74             q[i].pos = (q[i].l - 1) / SZ + 1;
75         }
76         sort(q, q + m);
77         solve(n, m);
78         for(int i = 0; i < m; i++) printf("%d\n", res[i]);
79     }
80     return 0;
81 }

原文地址:https://www.cnblogs.com/yijiull/p/8350762.html

时间: 2024-11-09 08:22:50

Mato的文件管理 HYSBZ - 3289的相关文章

AC日记——Mato的文件管理 bzoj 3289

3289 思路: 莫队求区间逆序对个数,树状数组维护: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 50005 int bel[maxn],blo; struct QueryType { int l,r,id; bool operator<(const QueryType pos)const { if(bel[l]==bel[pos.l]) return r<pos.r; return bel[l]&

BZOJ 3289: Mato的文件管理[莫队算法 树状数组]

3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 2399  Solved: 988[Submit][Status][Discuss] Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的,只能用Mato自己写的程序才能访问.Mato每天随机选一个区间[l,r],他今天就看编号在此区间内的这些资料.Mat

BZOJ 3289 Mato的文件管理(莫队+离散化求逆序数)

3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MB Submit: 2171  Solved: 891 [Submit][Status][Discuss] Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的,只能用Mato自己写的程序才能访问.Mato每天随机选一个区间[l,r],他今天就看编号在此区间内的这些资料.M

bzoj 3289: Mato的文件管理 莫队+树状数组

3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的,只能用Mato自己写的程序才能访问.Mato每天随机选一个区间[l,r],他今天就看编号在此区间内的这些资料.Mato有一个习惯,他总是从文件大小从小到大看资料.他先

【BZOJ 3289】 Mato的文件管理

3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MB Submit: 530  Solved: 227 [Submit][Status] Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的,只能用Mato自己写的程序才能访问.Mato每天随机选一个区间[l,r],他今天就看编号在此区间内的这些资料.Mato有一个习惯,他

【bzoj3289】Mato的文件管理

3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MB Submit: 1056  Solved: 464 [Submit][Status][Discuss] Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的,只能用Mato自己写的程序才能访问.Mato每天随机选一个区间[l,r],他今天就看编号在此区间内的这些资料.M

HYSBZ-3289 Mato的文件管理

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

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

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

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

http://blog.csdn.net/gokou_ruri/article/details/7723378 ↑惯例Mark大神的博客 bzoj3289:Mato的文件管理 线段树求逆序对+莫队,但是数据量50000却没有给出范围,既然求逆序对,那么我们关注的只是数据之间的相对大小,此时我们可以把这50000个数据进行简化...嗯看大神的博客就明白了不需要多解释什么了..   下面是博客中未授权截取的大神的代码板子....不过都是自己看应该也没什么吧..... sort(sub_a,sub_a