nbut1457 Sona 【莫队算法+离散化】
来源:互联网 发布:自己录制电台软件 编辑:程序博客网 时间:2024/05/18 17:26
- map离散化会超时
- 答案会爆int,long long 输出控制为%I64d
#include<algorithm>#include<iostream>#include<string.h>#include<stdio.h>#include<math.h>#include<map>using namespace std;typedef long long ll;const int N=100000+10;struct node{ int l,r,id;}Q[N];int pos[N],n,m,L,R,a[N],b[N],has[N];int cmp(node a,node b){ if(pos[a.l]==pos[b.l]) return a.r<b.r; return pos[a.l]<pos[b.l];}ll out[N],ans,mp[N];void add(int x){ int t=a[x]; ans=ans-(ll)mp[t]*mp[t]*mp[t]; mp[t]++; ans=ans+(ll)mp[t]*mp[t]*mp[t];}void del(int x){ int t=a[x]; ans=ans-mp[t]*mp[t]*mp[t]; mp[t]--; ans=ans+mp[t]*mp[t]*mp[t];}int main(){ while(~scanf("%d",&n)) { int sz=(int)sqrt(1.0*n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); pos[i]=i/sz; b[i]=a[i]; } sort(b+1,b+n+1); int t=1; has[t]=b[1]; for(int i=2;i<=n;i++) { if(b[i]==b[i-1]) continue; t++; has[t]=b[i]; } for(int i=1;i<=n;i++) { a[i]=lower_bound(has+1,has+t+1,a[i])-has+1; } scanf("%d",&m); for(int i=1;i<=m;i++) { scanf("%d%d",&Q[i].l,&Q[i].r); Q[i].id=i; } sort(Q+1,Q+1+m,cmp); memset(mp,0,sizeof(mp)); L=1; R=0; ans=0; for(int i=1;i<=m;i++) { while(L<Q[i].l) { del(L); L++; } while(L>Q[i].l) { L--; add(L); } while(R<Q[i].r) { R++; add(R); } while(R>Q[i].r) { del(R); R--; } out[Q[i].id]=ans; } for(int i=1;i<=m;i++) printf("%I64d\n",out[i]); } return 0;}
0 0
- nbut1457 Sona 【莫队算法+离散化】
- 莫队算法(NBUT1457 Sona)
- NBUT 1457 Sona(莫队算法+离散化)
- NBUT 1457 Sona (莫队算法)
- Sona - NBUT 1457 莫队算法
- NBUT 1457Sona(莫队算法)
- NBUT 1457 Sona (莫队算法)
- NBUT 1457 Sona 莫队算法
- NBUT 1457 Sona (莫队算法)
- NBUT 1457 Sona 莫队算法 分块处理
- NBUT 1457 Sona [简单莫队]
- NBUT 1457 (莫队算法 离散化)
- Sona
- BZOJ3289【莫队算法+树状数组+离散化】
- HDU4358【离散化+DFS序+莫队算法】
- 算法中的离散化
- chimerge数据离散化算法
- BZOJ 3289 Mato的文件管理 [ 离散化+莫队算法+线段树 ]
- Pm命令用法
- cvO2O的本质:形成闭环
- c++知识总结
- GEEK学习笔记— —程序员面试宝典笔记(二)
- LightOJ - 1016 Brush (II) (模拟)水
- nbut1457 Sona 【莫队算法+离散化】
- 关于一体封装盘封漆去除方法
- 10分钟详细解读android scrollview
- 第一次写的文档不会写。只能原生的第一句话
- 关于Class.getResource和ClassLoader.getResource的路径问题
- 宇视实习经历
- Cable Modem RF Online
- VR
- 一些类目说明