HDU 5919 Sequence II(主席树)
来源:互联网 发布:cfca 网络身份认证平台 编辑:程序博客网 时间:2024/06/09 03:28
代码:
#include <map>#include <set>#include <stack>#include <queue>#include <cmath>#include <string>#include <vector>#include <cstdio>#include <cctype>#include <cstring>#include <sstream>#include <cstdlib>#include <iostream>#include <algorithm>#pragma comment(linker,"/STACK:102400000,102400000")using namespace std;#define MAX 200010#define MAXN 1000005#define maxnode 5#define sigma_size 30#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define lrt rt<<1#define rrt rt<<1|1#define middle int m=(r+l)>>1#define LL long long#define ull unsigned long long#define mem(x,v) memset(x,v,sizeof(x))#define lowbit(x) (x&-x)#define pii pair<int,int>#define bits(a) __builtin_popcount(a)#define mk make_pair#define limit 10000//const int prime = 999983;const int INF = 0x3f3f3f3f;const LL INFF = 0x3f3f;//const double PI = acos(-1.0);const double inf = 1e18;const double eps = 1e-6;const LL mod = 1e9+7;const ull mx = 133333331;/*****************************************************/inline void RI(int &x) { char c; while((c=getchar())<'0' || c>'9'); x=c-'0'; while((c=getchar())>='0' && c<='9') x=(x<<3)+(x<<1)+c-'0'; }/*****************************************************/int a[MAX];int b[MAX];struct Node{ int l,r,c;}tr[MAX*40];int root[MAX];int pre[MAX];int sz;int build(int l,int r){ int k=sz++; if(l==r){ tr[k].c=0; return k; } int mid=(l+r)/2; tr[k].l=build(l,mid); tr[k].r=build(mid+1,r); return k;}int update(int rt,int l,int r,int pos,int d){ int k=sz++; tr[k].c=tr[rt].c+d; if(l==r) return k; int mid=(l+r)/2; if(pos<=mid){ tr[k].r=tr[rt].r; tr[k].l=update(tr[rt].l,l,mid,pos,d); } else{ tr[k].l=tr[rt].l; tr[k].r=update(tr[rt].r,mid+1,r,pos,d); } return k;}int query(int rt,int l,int r,int L,int R){ if(L<=l&&r<=R) return tr[rt].c; int mid=(l+r)/2; int ans=0; if(L<=mid) ans+=query(tr[rt].l,l,mid,L,R); if(R>mid) ans+=query(tr[rt].r,mid+1,r,L,R); return ans; }int QQQ(int lr,int l,int r,int pos){ if(l==r) return l; int mid=(l+r)/2; if(tr[tr[lr].l].c>=pos) return QQQ(tr[lr].l,l,mid,pos); else return QQQ(tr[lr].r,mid+1,r,pos-tr[tr[lr].l].c);}int main(){ //freopen("in.txt","r",stdin); int t,kase=0; cin>>t; while(t--){ kase++; int n,m; cin>>n>>m; for(int i=1;i<=n;i++) RI(a[i]); mem(pre,-1); sz=0; root[n+1]=build(1,n); for(int i=n;i;i--){ if(pre[a[i]]==-1) root[i]=update(root[i+1],1,n,i,1); else{ int tmp=update(root[i+1],1,n,pre[a[i]],-1); root[i]=update(tmp,1,n,i,1); } pre[a[i]]=i; } printf("Case #%d:",kase); int xx=0; while(m--){ int l,r; RI(l);RI(r); int ll=(l+xx)%n+1; int rr=(r+xx)%n+1; l=min(ll,rr); r=max(ll,rr); int num=query(root[l],1,n,l,r); num=ceil(num/2.0); xx=QQQ(root[l],1,n,num); printf(" %d",xx); } cout<<endl; } return 0;}
0 0
- HDU 5919 Sequence II(主席树)
- hdu 5919 Sequence II 主席树
- HDU 5919 Sequence II(主席树)
- [HDU 5919] Sequence II (主席树)
- HDU 5919 Sequence II(主席树)
- HDU 5919 Sequence II 主席树
- HDU 5919 Sequence II 【主席树】
- HDU 5919 Sequence II 主席树
- [hdu 5919 Sequence II] 主席树
- hdu 5919 Sequence II(主席树)
- HDU 5919 Sequence II [主席树]【数据结构】
- hdu 5919 Sequence II(主席树)
- HDU-5919 Sequence II 主席树二分
- HDU 5919-Sequence II(主席树)
- CCPC长春站 HDU-5919 Sequence II 主席树
- hdoj 5919 Sequence II 【主席树】
- hdu 5919 Sequence II (主席树,求区间不同数的个数)
- Hdu-5919 Sequence II(主席树在线求区间不同数)
- oracle基础教程(第三天)Java操作数据库
- 【SSM 7】Mybatis底层封装思路
- .NET异步编程总结----四种实现模式
- adb的简单用法
- hdu5920 Ugly Problem【贪心+高精度减法】
- HDU 5919 Sequence II(主席树)
- Common.js
- 面向对象程序设计上机练习八(对象数组)
- C#之XML基础 节点.innertext,为标签添加内容
- python中self和cls
- shell变量、重定向、管道
- 算法导论--红黑树的维持平衡
- Elasticsearch
- 【HDU 2601 】