hdu (3874)树状数组
来源:互联网 发布:python打开谷歌浏览器 编辑:程序博客网 时间:2024/05/18 02:58
求区间【L,R】的不同的数的和。
解答:这题没有离散化。先记录该位置出现的数字往前最近出现的位置,然后按查询的的右端点排序,最后一次扫描各个点同时检查右端点在该位置的询问。
#include <iostream>#include <cstring>#include <vector>#include <cstdio>#include <map>#include <algorithm>#define LL __int64using namespace std;const int N=50090;LL C[N+100];int ss[1000006];//记录位置int n,q;int val[N];int pre[N];//记录前驱val【I】的位置struct Node{ int L,R; int id;}Q[209008];bool cmp(Node a,Node b){ return a.R<b.R;}LL ans[209008];int lowbit(int a){ return a&(-a);}LL getsum(int p){ LL ans=0; for(int i=p;i>0;i-=lowbit(i)) ans+=C[i]; return ans;}void Modify(int p,int c){ for(int i=p;i<=n+2;i+=lowbit(i)) C[i]+=c;}int in(){ char ch; int a = 0; while((ch = getchar()) == ' ' || ch == '\n'); a += ch - '0'; while((ch = getchar()) != ' ' && ch != '\n') { a *= 10; a += ch - '0'; } return a;}int main(){ int cas; cas=in(); int T=0; while(cas--) { memset(ss,0,sizeof(ss)); memset(C,0,sizeof(C)); n=in(); for(int i=1;i<=n;i++) { val[i]=in(); if(ss[val[i]]==0) { ss[val[i]]=i; pre[i]=ss[val[i]]; } else { pre[i]=ss[val[i]]; ss[val[i]]=i; } } q=in(); for(int i=1;i<=q;i++) { Q[i].L=in(); Q[i].R=in(); Q[i].id=i; } sort(Q+1,Q+q+1,cmp); int cnt=1; for(int i=1;i<=n;i++) { int v=val[i]; int p=pre[i]; if(p==i) Modify(p,v); else { Modify(p,-v); Modify(i,v); } while(Q[cnt].R==i) { ans[Q[cnt].id]=getsum(Q[cnt].R)-getsum(Q[cnt].L-1); cnt++; } } for(int i=1;i<=q;i++) printf("%I64d\n",ans[i]); } return 0;}
- hdu (3874)树状数组
- hdu 3874 树状数组
- hdu 3874(树状数组)
- hdu 3874 树状数组
- HDU 3874 树状数组
- hdu 3874 树状数组
- HDU 3874 Necklace(树状数组)
- hdu 3874(树状数组+离线算法)
- hdu-3874-Necklace-(树状数组)
- HDU 3874 Necklace 树状数组
- HDU 3874 Necklace (树状数组)
- Hdu 3874 Necklace 树状数组
- hdu 3874 Necklace (树状数组)
- HDU(3874)树状数组+离线
- hdu 2352(树状数组)
- HDU 1556(树状数组)
- hdu 5493 (树状数组)
- HDU 4911 (树状数组)
- 最有价值的编程忠告
- C/C++命名风格
- javascript grud
- c++多线程编写网络聊天室程序(socket)
- 关于int main(int argc,char *argv[]) 是什么意思
- hdu (3874)树状数组
- truncate表的数据恢复(一)
- dimino学习
- 判断一个Activity是否在最前端
- WCF4.0 –- RESTful WCF Services (实例) (并发同步服务 SyncService)
- javascript option操作
- HOG 行人检测 学习体会(如何制作训练样本)
- Http 错误编码
- Java中静态数组与动态数组