专题——线段树和树状数组(HDOJ)09 Turing Tree 【hdu 3333】
来源:互联网 发布:编程珠玑 适合新手看吗 编辑:程序博客网 时间:2024/06/03 21:39
读入所有query,按右端点递增排序,hash记录当前值的下标,删去(0,t)中相同且非最后一次出现的元素,计算每个query
Best solutions for Problem 3333
Language : AllG++GCCC++CPascalJava
RankAuthorExe. TimeExe. MemoryCode Len.LanguageDate1wxf281MS3844K2342BG++2012-03-28 14:10:09速度还算比较快了
#include<iostream>#include<cstdio>using namespace std;typedef long long ll;const int maxn=100010;struct Query{ int s,t,id; bool operator < (const Query a) const { return this->t<a.t; }}q[maxn];struct TreeArr{ ll a[maxn]; int n; void init(int n) { this->n=n; memset(a,0,sizeof(a)); } void insert(int k,ll v) { for(;k<=n;k+=k&-k) a[k]+=v; } ll query(int k) { ll s=0; for(;k;k-=k&-k) s+=a[k]; return s; } ll query(int s,int t) { return query(t)-query(s-1); }}ta;struct Hash{ int a[140000],b[140000]; int hash(int x) { return x&131071; } void init() { memset(a,-1,sizeof(a)); memset(b,0,sizeof(b)); } void ins(int x,int k) { int z=hash(x); while(a[z]!=-1&&a[z]!=x) z=hash(z+1); a[z]=x,b[z]=k; } int get(int x) { int z=hash(x); while(a[z]!=-1&&a[z]!=x) z=hash(z+1); if(a[z]==-1) return -1; return b[z]; } }hash;struct IO_int{ char ch,buf[20];int i; void operator >>(int &d) { while(ch=getchar(),ch<48||ch>57);d=ch-48; while(ch=getchar(),ch<58&&ch>47) d=d*10+ch-48; } void operator <<(ll d) { if(d==0){ puts("0");return;} for(i=19;d;d/=10) buf[--i]=d%10+48; puts(buf+i); }}io;int a[maxn];ll ans[maxn];int main(){ int t;io>>t; while(t--) { ta.init(30000);hash.init(); int n;io>>n; for(int i=0;i<n;i++) io>>a[i]; int m;io>>m; for(int i=0;i<m;i++) { io>>q[i].s; io>>q[i].t; q[i].id=i; } sort(q,q+m); int lim=1; for(int i=0;i<m;i++) { while(q[i].t>=lim) { int &x=a[lim-1]; int y=hash.get(x); hash.ins(x,lim); if(y!=-1) ta.insert(y,-x); ta.insert(lim,x); lim++; } ans[q[i].id]=ta.query(q[i].s,q[i].t); } for(int i=0;i<m;i++) io<<ans[i]; } return 0;}
- 专题——线段树和树状数组(HDOJ)09 Turing Tree 【hdu 3333】
- HDU 3333 Turing Tree(树状数组 || 线段树)
- HDU 3333 Turing Tree 线段树 or 树状数组
- hdu 3333 Turing Tree 线段树/树状数组
- hdu 3333 Turing Tree 树状数组或者线段树
- HDU 3333 Turing Tree(树状数组)
- hdu 3333 Turing Tree ( 树状数组)
- HDU 3333 Turing Tree(离线操作+线段树||树状数组)
- HDU-3333-Turing Tree(离线+哈希+树状数组|线段树)
- hdoj 3333 Turing Tree 【树状数组】
- HDU-3333:Turing Tree(莫队算法+线段树或树状数组+map或离散化)
- hdu 3333 Turing Tree(线段树)
- HDU 3333 Turing Tree(线段树)
- hdu 3333 Turing Tree 树状数组
- HDU - 3333 Turing Tree(树状数组)
- HDU 3333 Turing Tree (离线树状数组)
- HDU 3333 Turing Tree 树状数组离线
- 专题——线段树和树状数组(HDOJ)14 LCIS
- 设计的最高境界----代码即是设计,设计即是代码;无设计亦有代码,无代码亦有设计
- android NDK 编译 Platinum
- ORACLE日期时间函数大全
- 云计算加密
- 继承的访问权限
- 专题——线段树和树状数组(HDOJ)09 Turing Tree 【hdu 3333】
- 制作Linux映像和Kernel的启动
- iOS: Objective C "Selector" 用法
- 云计算加密
- androd中使用 https ssl
- 云计算加密
- [DOS]BAT常用知识
- GitHub 与社会化编程
- 云计算加密