码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ3781 小B的询问

时间:2014-11-27 20:20:22      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   for   

又是莫队= =

话说这题和"小z的袜子"有区别嘛= =

 

bubuko.com,布布扣
 1 /**************************************************************
 2     Problem: 3781
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:2212 ms
 7     Memory:2380 kb
 8 ****************************************************************/
 9  
10 #include <cstdio>
11 #include <cmath>
12 #include <algorithm>
13  
14 using namespace std;
15 typedef long long ll;
16 const int N = 50005;
17  
18 int n, Q, c[N];
19 int sz, pos[N];
20 int l, r, cnt[N];
21 ll sum, ans[N];
22  
23 struct query {
24     int l, r, id;
25      
26     inline bool operator < (const query &b) const {
27         return pos[l] == pos[b.l] ? r < b.r : pos[l] < pos[b.l];
28     }
29 } a[N];
30  
31 inline int read() {
32     int x = 0;
33     char ch = getchar();
34     while (ch < 0 || 9 < ch)
35         ch = getchar();
36     while (0 <= ch && ch <= 9) {
37         x = x * 10 + ch - 0;
38         ch = getchar();
39     }
40     return x;
41 }
42  
43 inline ll Sqr(int x) {
44     return (ll) x * x;
45 }
46  
47 inline void update(int x, int d) {
48     sum -= (ll) Sqr(cnt[x]);
49     cnt[x] += d;
50     sum += (ll) Sqr(cnt[x]);
51 }
52  
53 int main() {
54     int i;
55     n = read(), Q = read(), read();
56     for (i = 1; i <= n; ++i)
57         c[i] = read();
58     sz = (int) sqrt(n);
59     for (i = 1; i <= n; ++i)
60         pos[i] = (i - 1) / sz + 1;
61     for (i = 1; i <= Q; ++i)
62         a[i].l = read(), a[i].r = read(), a[i].id = i;
63     sort(a + 1, a + Q + 1);
64     for (i = 1, l = 1, r = 0; i <= Q; ++i) {
65         while (r < a[i].r) update(c[++r], 1);
66         while (r > a[i].r) update(c[r--], -1);
67         while (l > a[i].l) update(c[--l], 1);
68         while (l < a[i].l) update(c[l++], -1);
69         ans[a[i].id] = sum;
70     }
71     for (i = 1; i <= Q; ++i)
72         printf("%lld\n", ans[i]);
73     return 0;
74 }
View Code

(p.s. 直接Rank倒3,蒟蒻被踩烂了= =)

BZOJ3781 小B的询问

标签:style   blog   http   io   ar   color   os   sp   for   

原文地址:http://www.cnblogs.com/rausen/p/4126977.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!