博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3781:小B的询问(莫队)
阅读量:6823 次
发布时间:2019-06-26

本文共 1208 字,大约阅读时间需要 4 分钟。

Description

小B有一个序列,包含N个1~K之间的整数。他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数。小B请你帮助他回答询问。

Input

第一行,三个整数N、M、K。
第二行,N个整数,表示小B的序列。
接下来的M行,每行两个整数L、R。

Output

M行,每行一个整数,其中第i行的整数表示第i个询问的答案。
 

Sample Input

6 4 3
1 3 2 1 1 3
1 4
2 6
3 5
5 6

Sample Output

6
9
5
2

HINT

对于全部的数据,1<=N、M、K<=50000

Solution

莫队水题

Code

1 #include
2 #include
3 #include
4 #include
5 #include
6 #define N (50000+100) 7 using namespace std; 8 struct node 9 {10 int l,r,id,ans,ord;11 }Ask[N];12 int a[N],n,m,k,cnt[N],Sigma,l=1,r=0;13 bool cmp1 (node a,node b){
return a.id==b.id?a.r
L) Ins(a[--l]);33 while (r
R) Del(a[r--]);35 Ask[x].ans=Sigma;36 }37 int main()38 {39 scanf("%d%d%d",&n,&m,&k);40 int len=pow(n,2.0/3.0);41 for (int i=1;i<=n;++i) 42 scanf("%d",&a[i]);43 for (int i=1;i<=m;++i)44 {45 scanf("%d%d",&Ask[i].l,&Ask[i].r);46 Ask[i].id=Ask[i].l/len;47 Ask[i].ord=i;48 }49 sort(Ask+1,Ask+m+1,cmp1);50 for (int i=1;i<=m;++i)51 MoQueue(i);52 sort(Ask+1,Ask+m+1,cmp2);53 for (int i=1;i<=m;++i)54 printf("%d\n",Ask[i].ans);55 }

转载于:https://www.cnblogs.com/refun/p/8685605.html

你可能感兴趣的文章
2016阿里安全峰会重点资料下载
查看>>
B窗体继承于A窗体,B启动:问题点
查看>>
解决input 有多少个radio绑定change事件,手动触发就会执行多少次问题
查看>>
SQL 时间格式转换
查看>>
针对DDR2-800和DDR3的PCB信号完整性设计
查看>>
RouteOS软路由HotSpot热点认证网关
查看>>
jenkins添加git源码目录时报Error performing command错误
查看>>
delphi多语言
查看>>
[Z] SQL SERVER 的前世今生--各版本功能对比
查看>>
df -h显示磁盘使用情况
查看>>
北京木瓜移动科技有限公司
查看>>
redis运维的一些知识点
查看>>
ZZZZ
查看>>
Win7或Windows server 2008中IIS7支持ASP+Access解决方法
查看>>
intent 图片调用问题
查看>>
div仿框架布局
查看>>
Windows 服务(附服务开发辅助工具)
查看>>
asp.net mvc的生命周期{转}
查看>>
SOLR (全文检索)
查看>>
PIGS(最大流)
查看>>