NBUT 1457 分块
来源:互联网 发布:淘宝网买手机可靠吗 编辑:程序博客网 时间:2024/05/18 16:55
题目链接: Click_here~
0 0.。。
题目意思就是统计出多少个某个数字出现了多少次。假设 3,1都出现了5次。。 则和是 5*5*5+5*5*5
因为是10秒。。分块无压力。。
#include <cstdio>#include <cstdlib>#include <iostream>using namespace std;#define LL long longconst int N = 133333;const int Sqrt = 555;int a[N],b[N],cnt[N],ll[N],rr[N],idx[N];int n,q;bool cmp(int x,int y){ if(ll[x]/Sqrt == ll[y]/Sqrt) return rr[x] < rr[y]; return ll[x] < ll[y]; } LL ret , ans[N] ,F[N];int main(){for(int i = 0;i < N;i++) F[i] = (LL)i*i*i;while(scanf("%d",&n)!=EOF){memset(cnt,0,sizeof(cnt));for(int i = 0;i < n;i++) scanf("%d",a+i);memcpy(b,a,sizeof(a));sort(b,b+n);int sz = unique(b,b+n)-b;for(int i=0;i<n;i++) a[i] = lower_bound(b,b+sz,a[i])-b;scanf("%d",&q);for(int i=0;i<q;i++) idx[i] = i;for(int i=0;i<q;i++) scanf("%d %d",&ll[i],&rr[i]);sort(idx,idx+q,cmp);int ql = 0 , qr = -1;ret = 0;for(int i=0;i<q;i++){int l = ll[idx[i]] , r = rr[idx[i]];l--,r--;while(qr < r){ret -= F[cnt[a[++qr]]];ret += F[++cnt[a[qr]]];}while(ql > l){ret -= F[cnt[a[--ql]]];ret += F[++cnt[a[ql]]];}while(qr > r){ret -= F[cnt[a[qr]]];ret += F[--cnt[a[qr--]]];}while(ql < l){ret -= F[cnt[a[ql]]];ret += F[--cnt[a[ql++]]];}ans[idx[i]] = ret;}for(int i = 0;i < q;i++)//cout << ans[i] << endl;printf("%I64d\n",ans[i]);}return 0;}
0 0
- NBUT 1457 分块法
- NBUT 1457 分块
- NBUT 1457 Sona 莫队算法 分块处理
- NBUT 1457 Sona
- NBUT
- NBUT
- NBUT
- NBUT
- NBUT
- 【NBUT
- NBUT
- NBUT
- NBUT
- NBUT
- NBUT
- NBUT 1457 Sona (莫队算法)
- Sona - NBUT 1457 莫队算法
- NBUT 1457 Sona [简单莫队]
- Error Cannot Verify Database login information. [INS00104] : While Installing SAP BOBI 4.0 SP4 on SU
- LeetCode: Word Break [139]
- nyoj题目33 蛇形填数
- Virtualbox装Mac OSX 10.9笔记
- LeetCode: Word Break II [140]
- NBUT 1457 分块
- LeetCode: Linked List Cycle [141]
- OCP-1Z0-051-题目解析-第18题
- 【OJ】(二)---H---输出学生信息
- "The Civil War in France" translation03
- hdu 1850 (博弈)
- Eclipse怎样显示行号
- 完全卸载oracle11g步骤:
- java 缩放图片类