【SDOI2009】HH的项链
2017-02-08 10:10
197 查看
#include<cstdio> #include<cstdlib> #include<iostream> #include<cstring> #include<algorithm> #define RG register #define lowbit(o) (o&(-o)) using namespace std; bool bj[2000000]; int a[2000000],last[2000000],tree[2000000],nxt[2000000],p[2000000]; int n,m,you,zuo; struct data { int l; int r; int id; int ans; }; data SPFA[2000000]; inline int comp(data a,data b) { return a.l<b.l; } inline int kmp(data a,data b) { return a.id<b.id; } inline int read() { RG int s=0,k=1; char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-') ch=getchar(); if(ch=='-') k=-1,ch=getchar(); while(ch>='0'&&ch<='9') s=s*10+(ch-'0'),ch=getchar(); return s*k; } inline void add(int i,int num) { while(i<=n) { tree[i]+=num; i+=lowbit(i); } } inline int query(int i) { RG int sum=0; while(i) { sum+=tree[i]; i-=lowbit(i); } return sum; } inline void init() {memset(bj,true,sizeof(bj)); n=read(); for(RG int i=1;i<=n;i++) a[i]=read(); m=read(); for(RG int i=1;i<=m;i++) SPFA[i].l=read(),SPFA[i].r=read(),SPFA[i].id=i,SPFA[i].ans=0; for(int i=n;i>0;i--) nxt[i]=p[a[i]],p[a[i]]=i; for(int i=1;i<=n;i++) { if(bj[a[i]]==true) { add(p[a[i]],1); bj[a[i]]=false; } } // for(int k=1;k<=n;k++) cout<<tree[k]<<' '; // cout<<endl; sort(SPFA+1,SPFA+m+1,comp); int l=1; for(int i=1;i<=m;i++) { while(l<SPFA[i].l) { if(nxt[l]!=0) add(nxt[l],1); l++; } SPFA[i].ans=query(SPFA[i].r)-query(SPFA[i].l-1); } sort(SPFA+1,SPFA+m+1,kmp); for(int i=1;i<=m;i++) printf("%d\n",SPFA[i].ans); } int main() { init(); }
相关文章推荐
- [HEOI2012] 采花题解报告
- hdu 5975 树状数组原理题
- Codeforces Coder-Strike 2014 - Finals (online edition, Div. 1)
- HDU 1166 敌兵布阵
- POJ 2352 Stars
- PAT 1057 Stack (30)
- neu 1438 树状数组求逆序数
- Binary
- poj 2352
- 树状数组
- 树状数组 Binary Indexed Tree
- hdu 4630 No Pain No Game 树状数组
- poj1195 二维树状数组【pascal】
- 彻底搞懂二维树状数组
- 一维树状数组模板【pascal】
- POJ 2309 BST(树状数组)
- 【Hdu 1556】 Color the ball (树状数组)
- POJ 2352 Stars(树状数组)
- POJ2352 Stars(树状数组 or SplayTree)
- 数据结构颓废计划I-树状数组复习