bzoj 3781
又忘了给每个点标所属的块,瞬间就变成一个块了。
写莫队一定要试一下随机极限数据。
/**************************************************************
Problem: 3781
User: idy002
Language: C++
Result: Accepted
Time:1184 ms
Memory:2772 kb
****************************************************************/ #include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define maxn 50010
using namespace std; typedef long long lng; int n, m, k;
int w[maxn];
int mccno[maxn], lx[maxn], rx[maxn], stot;
int cnt[maxn];
lng ans[maxn], cur_ans; struct Qu {
int l, r, id;
bool operator<( const Qu & b ) const {
return mccno[l]<mccno[b.l] || (mccno[l]==mccno[b.l] && r<b.r );
}
};
Qu qu[maxn]; void init() {
memset( cnt, , sizeof(cnt) );
cur_ans = ;
}
void add( int v ) {
cur_ans -= cnt[v]*cnt[v];
cnt[v]++;
cur_ans += cnt[v]*cnt[v];
}
void del( int v ) {
cur_ans -= cnt[v]*cnt[v];
cnt[v]--;
cur_ans += cnt[v]*cnt[v];
} void partition() {
int len = (int)sqrt(n)+;
int stot = n/len;
rx[] = ;
for( int i=; i<=stot; i++ ) {
lx[i] = rx[i-]+;
rx[i] = rx[i-]+len;
}
if( rx[stot]!=n ) {
stot++;
rx[stot] = n;
lx[stot] = rx[stot-]+;
}
for( int i=; i<=stot; i++ )
for( int j=lx[i]; j<=rx[i]; j++ )
mccno[j] = i;
} void work() {
sort( qu+, qu++m );
for( int q=,lf,rg; q<=m; q++ ) {
if( q== || mccno[qu[q].l]!=mccno[qu[q-].l] ) {
lf = qu[q].l;
rg = lf-;
init();
}
while( lf<qu[q].l ) del( w[lf++] );
while( lf>qu[q].l ) add( w[--lf] );
while( rg<qu[q].r ) add( w[++rg] );
while( rg>qu[q].r ) del( w[rg--] );
ans[qu[q].id] = cur_ans;
}
} int main() {
scanf( "%d%d%d", &n, &m, &k );
for( int i=; i<=n; i++ )
scanf( "%d", w+i );
for( int i=; i<=m; i++ ) {
scanf( "%d%d", &qu[i].l, &qu[i].r );
qu[i].id = i;
}
partition();
work();
for( int i=; i<=m; i++ )
printf( "%lld\n", ans[i] );
}
bzoj 3781的更多相关文章
- 【莫队】bzoj 3781,bzoj 2038,bzoj 3289
好像又有一个星期没更博客了.. 最近疯狂考试...唯一有点收获的就是学会了莫队这种神奇的算法.. 听起来很难..其实是一个很简单的东西.. 就是在区间处理问题时对于一个待求区间[L',R']通过之前求 ...
- BZOJ 3781: 小B的询问
3781: 小B的询问 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 643 Solved: 435[Submit][Status][Discuss ...
- bzoj 3781: 小B的询问 分块
3781: 小B的询问 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 196 Solved: 135[Submit][Status] Descrip ...
- Bzoj 3781: 小B的询问 莫队,分块,暴力
3781: 小B的询问 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 426 Solved: 284[Submit][Status][Discuss ...
- 【模板】BZOJ 3781: 小B的询问 莫队算法
http://www.lydsy.com/JudgeOnline/problem.php?id=3781 N个数的序列,每次询问区间中每种数字出现次数的平方和,可以离线. 丢模板: #include ...
- bzoj 3781 小B的询问——分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3781 非常经典的分块套路.于是时间空间比大家的莫队差了好多…… #include<io ...
- bzoj 3781 小B的询问 —— 莫队
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3781 就是莫队,左端点分块排序,块内按右端点排序,然后直接做即可. 代码如下: #inclu ...
- 洛谷 P2709 BZOJ 3781 小B的询问
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求$\sum_1^Kc_i^2$的值,其中$c_i$表示数字i在[L..R]中的重复次数.小B请 ...
- bzoj 3781 小B的询问(莫队算法)
[题意] 若干个询问sigma{ cnt[i]^2 } cnt[i]表示i在[l,r]内的出现次数. [思路] 莫队算法,裸题. 一个cnt数组即可维护插入与删除. [代码] #include< ...
随机推荐
- Knockout双向绑定
knockout双工绑定基于 observe 模式,性能高.核心就是observable对象的定义.这个函数最后返回了一个也叫做 observable 的函数,也就是用户定义值的读写器(accesso ...
- 前端QRCode.js生成二维码(解决长字符串模块和报错问题)
QRCode 用法 1.使用npm安装到你的项目中 npm install qrcode2 --save 使用commonjs或者es6模块方式导入 var QRCode = require('qrc ...
- php常用函数——字符串函数
php常用函数——字符串函数
- docker安装总结 linux红帽系列
由于Docker限制分为两个版本CE和EE,所以之前yum里面的docker是老版本,需要先进行卸载,现在的包名叫做docker-ce yum remove docker docker-common ...
- ansible 下lineinfile详细使用 【转】
转自 ansible 下lineinfile详细使用 - 散人 - 51CTO技术博客http://zouqingyun.blog.51cto.com/782246/1882367 一.简述 这几天在 ...
- 大数据系列之Flume+kafka 整合
相关文章: 大数据系列之Kafka安装 大数据系列之Flume--几种不同的Sources 大数据系列之Flume+HDFS 关于Flume 的 一些核心概念: 组件名称 功能介绍 Agent ...
- Sublime Text2使用规则
Sublime Text是我发现的有一好用的编辑器,它不单单只支持 python ,几乎支持目前主流的语言,快捷键丰富,可以极大的提高代码开发效率.Sublime Text 网址:http://www ...
- fastJson去掉指定字段
public static String filterFieldsJson(Object src, Class<?> clazz, String... args) { SimpleProp ...
- group by的运用
select a.* from zeai_photo a inner join (select max(id) mid,userid from zeai_photo group by userid) ...
- LightOJ 1414 February 29(闰年统计+容斥原理)
题目链接:https://vjudge.net/contest/28079#problem/R 题目大意:给你分别给你两个日期(第二个日期大于等于第一个日期),闰年的2月29日称为闰日,让你求两个日期 ...