luogu P2709 小B的询问
来源:互联网 发布:淘宝追加评论后看不到 编辑:程序博客网 时间:2024/06/05 03:18
原题位置: https://www.luogu.org/problem/show?pid=2709
这道题是莫队,据说在离线区间查询上,莫队无敌,但是感觉还好吧;
首先这道题是一个用来练手的好题,因为这是板子题;
所以主要就是排序,然后while查询;
至于排序方式 :
首先 ,应用分块思想,以查询左端点所在块为第一关键字, 以右端点为第二关键字 ,均从小到大排序;
然后就没有然后了;
———————–分割线啊——————————–
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#define II int#define R register#define I 123456using namespace std;struct node { II l,r,wei;}aa[I];II kuan, ans,n,m,k,l=1,r=0;II c[I], kaa[I], a[I];bool maP(node a1,node a2) { if(a1.l/kuan==a2.l/kuan) return a1.r<a2.r; return a1.l/kuan<a2.l/kuan;}void add(R II x){ x=a[x]; ans-=c[x]*c[x]; c[x]++; ans+=c[x]*c[x];}void dle(R II x){ x=a[x]; ans-=c[x]*c[x]; c[x]--; ans+=c[x]*c[x];}int main(){ scanf("%d%d%d",&n,&m,&k); for(R II i=1;i<=n;i++) scanf("%d",&a[i]); for(R II i=1;i<=m;i++) scanf("%d%d",&aa[i].l,&aa[i].r), aa[i].wei=i; kuan=sqrt(n); sort(aa+1,aa+m+1,maP); for(R II i=1;i<=n;i++) { while (r<aa[i].r) add(++r);// cout<<ans<<" "; while (r>aa[i].r) dle(r--);// cout<<ans<<" "; while (l<aa[i].l) dle(l++);// cout<<ans<<" "; while (l>aa[i].l) add(--l);// cout<<ans<<" "; // 每次更改时更新ans; //cout<<endl; kaa[aa[i].wei]=ans; } for(R II i=1;i<=m;i++) printf("%d\n",kaa[i]); exit(0);}
————————————-文末分割线————————————–
by pretend-fal
END;
阅读全文
0 0
- luogu P2709 小B的询问
- [P2709]小B的询问
- 洛谷P2709 小B的询问
- P2709 小B的询问(莫队)
- 【洛谷P2709】小B的询问
- BZOJ3781小B的询问
- bzoj3781 小B的询问
- BZOJ3781: 小B的询问
- 3781: 小B的询问
- BZOJ3781[小B的询问]
- luoguP2709 小B的询问
- bzoj3781: 小B的询问
- bzoj3781 小B的询问
- BZOJ3781: 小B的询问
- bzoj 3781: 小B的询问
- bzoj3781 小B的询问【莫队】
- [BZOJ3781]小B的询问(莫队)
- bzoj 3781: 小B的询问
- 支付宝沙箱环境测试
- table
- Matlab 7.3 版本以上.mat文件存储问题
- 如何获取的地址栏中的地址和截取相关的参数
- jsp动作元素
- luogu P2709 小B的询问
- Css3(02)使用选择器插入内容(before/after)
- Linux Shell从入门到删除根目录跑路指南
- hibernate缓存
- PHP实现数组中两个数的和等于给定的目标值
- 高数引言3反了你个三角函数
- 更智能,更利落,更快速,新版IntelliJ IDEA 即将登场
- Visual Studio 运行程序时,结果画面为什么会一闪而过?
- 每日掌握一个Linux命令 之 选取命令 cut,grep