洛谷 P3285 [SCOI2014]方伯伯的OJ
看到这题,第一眼:平衡树水题,随便做一做好了
然后....我在花了n个小时去调试(维护平衡树父节点)之后,...
调了三个小时后,第一次失败的代码(只能查找排名为k的用户编号,不能根据编号查排名)
#include<cstdio>
#include<algorithm>
#include<queue>
#include<map>
using namespace std; int r[],lx[],rx[],sz[],ch[][];
map<int,int> ma,ma2;
queue<int> q;
int getnode()
{
int t=q.front();q.pop();return t;
}
void delnode(int x)
{
q.push(x);
}
int rand1()
{
static int x=;
return x=(48271LL*x+)%;
}
void upd(int x)
{
//sz[x]=sz[ch[x][0]]+sz[ch[x][1]];
sz[x]=sz[ch[x][]]+sz[ch[x][]]+rx[x]-lx[x]+;
}
int root;
int merge(int a,int b)
{
if(!a||!b) return a+b;
if(r[a]<r[b])
{
ch[a][]=merge(ch[a][],b);upd(a);
return a;
}
else
{
ch[b][]=merge(a,ch[b][]);upd(b);
return b;
}
}
typedef pair<int,int> P;
P split(int a,int n)//a的前n个放入first,剩余放入second
{
if(!a) return P(,);
int s=sz[ch[a][]];P t;
if(s>=n)
{
t=split(ch[a][],n);ch[a][]=t.second;upd(a);
return P(t.first,a);
}
else
{
t=split(ch[a][],n-s-);ch[a][]=t.first;upd(a);
return P(a,t.second);
}
}
P find(int x)
{
int num=root;P t;t.second=;
while()
{
if(lx[num]>x) num=ch[num][];
else if(rx[num]<x) t.second+=sz[ch[num][]]+rx[num]-lx[num]+,num=ch[num][];
else break;
}
t.first=num;
return t;
}
P find_kth(int k)
{
int num=root,ls;P t;t.second=;
while()
{
ls=sz[ch[num][]];
if(ls>=k) num=ch[num][];
else if(ls+rx[num]-lx[num]+>=k) break;
else t.second+=ls+rx[num]-lx[num]+,num=ch[num][];
}
t.first=num;
return t;
}
int newnode(int L,int R)
{
int t=getnode();r[t]=rand1();lx[t]=L;rx[t]=R;sz[t]=R-L+;
return t;
}
int n,m,lans;
int main()
{
P t1,t2,t3;
int x,y,t,ta,tb,tc,i,idx;
for(i=;i<;i++) q.push(i);
scanf("%d%d",&n,&m);
root=getnode();lx[root]=;rx[root]=n;sz[root]=n;r[root]=rand1();
for(i=;i<=m;i++)
{
scanf("%d",&idx);
if(idx==)
{
scanf("%d%d",&x,&y);x-=lans;y-=lans;
if(ma.count(x))//ma记录用户编号对应的虚拟编号
{
t=ma[x];ma.erase(x);ma[y]=x;
ma2[t]=y;//ma2反过来
}
else
{
t=x;ma[y]=x;ma2[t]=y;
}
//t1=find(y);lans=t1.second+y-lx[t1.first]+1;
t1=find(t);lans=t1.second+t-lx[t1.first]+;
printf("%d\n",lans);
}
else if(idx==)
{
scanf("%d",&x);x-=lans;x=ma.count(x)?ma[x]:x;
t1=find(x);t=t1.second+x-lx[t1.first]+;
t2=split(root,t1.second);t3=split(t2.second,rx[t1.first]-lx[t1.first]+);
if(lx[t3.first]!=x)
{
ta=newnode(lx[t3.first],x-);
}
else
ta=;
tb=newnode(x,x);
if(rx[t3.first]!=x)
{
tc=newnode(x+,rx[t3.first]);
}
else
tc=;
delnode(t3.first);
root=merge(merge(tb,t2.first),merge(ta,merge(tc,t3.second)));
printf("%d\n",t);lans=t;
}
else if(idx==)
{
scanf("%d",&x);x-=lans;x=ma.count(x)?ma[x]:x;
t1=find(x);t=t1.second+x-lx[t1.first]+;
t2=split(root,t1.second);t3=split(t2.second,rx[t1.first]-lx[t1.first]+);
if(lx[t3.first]!=x)
{
ta=newnode(lx[t3.first],x-);
}
else
ta=;
tb=newnode(x,x);
if(rx[t3.first]!=x)
{
tc=newnode(x+,rx[t3.first]);
}
else
tc=;
root=merge(merge(t2.first,ta),merge(tc,merge(t3.second,tb)));
printf("%d\n",t);lans=t;
}
else if(idx==)
{
scanf("%d",&x);x-=lans;x=ma.count(x)?ma[x]:x;
t1=find_kth(x);
t=t1.first+t1.second-lx[t1.first]+;
lans=ma2.count(t)?ma2[t]:t;
printf("%d\n",lans);
}
}
return ;
}
又是四个小时后,第二次失败的代码(由于只记录了编号对应的root或ch[][]中某位置的指针,拆分某节点时无法一并改变这些关联的指针)
#include<cstdio>
#include<algorithm>
#include<map>
#include<queue>
#define N 100005
using namespace std;
typedef pair<int,int> P;
typedef pair<P,int*> P2; int lx[N],rx[N],sz[N],fa[N],ch[N][],r[N];
map<P,int*> ma;
queue<int> q;
int root;
int rand1()
{
static int x=;
return x=(48271LL*x+)%;
}
int getnode()
{
int t=q.front();q.pop();r[t]=rand1();
lx[t]=rx[t]=sz[t]=fa[t]=ch[t][]=ch[t][]=;
return t;
}
void delnode(int x) {q.push(x);}
void upd(int x) {sz[x]=sz[ch[x][]]+sz[ch[x][]]+rx[x]-lx[x]+;} P split(int a,int n)
{
if(!a) return P(,);
int ls=sz[ch[a][]];P t;
if(n<=ls)
{
t=split(ch[a][],n);ch[a][]=t.second;
if(ch[a][]) fa[ch[a][]]=a;
upd(a);t.second=a;
}
else
{
t=split(ch[a][],n-ls-);ch[a][]=t.first;
if(ch[a][]) fa[ch[a][]]=a;
upd(a);t.first=a;
}
return t;
} int merge(int a,int b)
{
if(!a||!b) return a+b;
if(r[a]<r[b])
{
ch[a][]=merge(ch[a][],b);upd(a);
if(ch[a][]) fa[ch[a][]]=a;
return a;
}
else
{
ch[b][]=merge(a,ch[b][]);upd(b);
if(ch[b][]) fa[ch[b][]]=b;
return b;
}
}
int n,m;
int *get_pointer(int x)
{
if(x==root) return &root;
else if(x==ch[fa[x]][]) return &ch[fa[x]][];
else return &ch[fa[x]][];
} void split_node_of_user(int x)
{
P2 t;int l,r,t1,t2,t3,t4,t5,oo;
t=*ma.lower_bound(P(x,));ma.erase(t.first);
l=t.first.second;r=t.first.first;int &o=*t.second;
t1=,t2=,t3=,t4=ch[o][],t5=ch[o][];
if(x>l) {t1=getnode();lx[t1]=l;rx[t1]=x-;sz[t1]=x-l;}
t2=getnode();lx[t2]=rx[t2]=x;sz[t2]=;
if(x<r) {t3=getnode();lx[t3]=x+;rx[t3]=r;sz[t3]=r-x;}
oo=o;o=merge(merge(t4,t1),merge(merge(t2,t3),t5));fa[o]=fa[oo];
delnode(oo);
if(x>l) ma[P(x-,l)]=get_pointer(t1);
ma[P(x,x)]=get_pointer(t2);
if(x<r) ma[P(r,x+)]=get_pointer(t3);
}
int get_rank(int o)
{
int ans=sz[ch[o][]];
while(o!=root)
{
if(o==ch[fa[o]][]) ans+=rx[fa[o]]-lx[fa[o]]++sz[ch[fa[o]][]];
o=fa[o];
}
return ans;
}
int find_kth(int k)
{
int o=root,ls,ns;
while()
{
ls=sz[ch[o][]];ns=rx[o]-lx[o]+;
if(ls>=k) o=ch[o][];
else if(ls+ns>=k) break;
else k-=(ls+ns),o=ch[o][];
}
return lx[o]+k-;
}
int get_rank_of_user(int x)
{
P2 t=*ma.lower_bound(P(x,));
return get_rank(*t.second)+x-lx[*t.second];
} int main()
{
int i,idx,x,y,t,lans=;int *tx;P t1,t2;
for(i=;i<N;++i) q.push(i);
scanf("%d%d",&n,&m);
root=getnode();lx[root]=;rx[root]=n;sz[root]=n;ma.insert(P2(P(n,),&root));
for(i=;i<=m;i++)
{
scanf("%d",&idx);
if(idx==)
{
scanf("%d%d",&x,&y);x-=lans;y-=lans;lans=get_rank_of_user(x)+;
split_node_of_user(x);tx=ma[P(x,x)];lx[*tx]=rx[*tx]=y;
ma[P(y,y)]=tx;ma.erase(P(x,x));
printf("%d\n",lans);
}
else if(idx==)
{
scanf("%d",&x);x-=lans;lans=get_rank_of_user(x)+;
split_node_of_user(x);t=get_rank(*ma[P(x,x)]);
t1=split(root,t);t2=split(t1.second,);
root=merge(merge(t2.first,t1.first),t2.second);
printf("%d\n",lans);
}
else if(idx==)
{
scanf("%d",&x);x-=lans;lans=get_rank_of_user(x)+;
split_node_of_user(x);t=get_rank(*ma[P(x,x)]);
t1=split(root,t);t2=split(t1.second,);
root=merge(merge(t1.first,t2.second),t2.first);
printf("%d\n",lans);
}
else if(idx==)
{
scanf("%d",&x);x-=lans;
printf("%d\n",find_kth(x));
}
}
return ;
}
该改的改完之后(包括父节点维护),玄学失败N次的代码
#include<cstdio>
#include<algorithm>
#include<map>
#include<queue>
#define N 300005
using namespace std;
typedef pair<int,int> P;
typedef pair<P,int> P2; int lx[N],rx[N],sz[N],fa[N],ch[N][],r[N];
map<P,int> ma;
queue<int> q;
int root;
int rand1()
{
static int x=;
return x=(48271LL*x+)%;
}
int getnode()
{
int t=q.front();q.pop();r[t]=rand1();
lx[t]=rx[t]=sz[t]=fa[t]=ch[t][]=ch[t][]=;
return t;
}
void delnode(int x) {q.push(x);}
void upd(int x) {sz[x]=sz[ch[x][]]+sz[ch[x][]]+rx[x]-lx[x]+;} P split(int a,int n)
{
if(!a) return P(,);
int ls=sz[ch[a][]];P t;
if(n<=ls)
{
t=split(ch[a][],n);ch[a][]=t.second;
if(ch[a][]) fa[ch[a][]]=a;
upd(a);t.second=a;
}
else
{
t=split(ch[a][],n-ls-(rx[a]-lx[a]+));ch[a][]=t.first;
if(ch[a][]) fa[ch[a][]]=a;
upd(a);t.first=a;
}
return t;
} int merge(int a,int b)
{
if(!a||!b) return a+b;
if(r[a]<r[b])
{
ch[a][]=merge(ch[a][],b);upd(a);
if(ch[a][]) fa[ch[a][]]=a;
return a;
}
else
{
ch[b][]=merge(a,ch[b][]);upd(b);
if(ch[b][]) fa[ch[b][]]=b;
return b;
}
}
int n,m;
int& get_ref(int x)
{
if(x==root) return root;
if(x==ch[fa[x]][]) return ch[fa[x]][];
return ch[fa[x]][];
} void split_node_of_user(int x)
{
P2 t;int l,r,t1,t2,t3,t4,t5,oo;
t=*ma.lower_bound(P(x,));ma.erase(t.first);
l=t.first.second;r=t.first.first;int &o=get_ref(t.second);
t1=,t2=,t3=,t4=ch[o][],t5=ch[o][];
if(x>l) {t1=getnode();lx[t1]=l;rx[t1]=x-;sz[t1]=x-l;}
t2=getnode();lx[t2]=rx[t2]=x;sz[t2]=;
if(x<r) {t3=getnode();lx[t3]=x+;rx[t3]=r;sz[t3]=r-x;}
oo=o;o=merge(merge(t4,t1),merge(merge(t2,t3),t5));fa[o]=fa[oo];
delnode(oo);
if(x>l) ma[P(x-,l)]=t1;
ma[P(x,x)]=t2;
if(x<r) ma[P(r,x+)]=t3;
}
int get_rank(int o)
{
int ans=sz[ch[o][]];
while(o!=root)
{
if(o==ch[fa[o]][]) ans+=rx[fa[o]]-lx[fa[o]]++sz[ch[fa[o]][]];
o=fa[o];
}
return ans;
}
int find_kth(int k)
{
int o=root,ls,ns;
while()
{
ls=sz[ch[o][]];ns=rx[o]-lx[o]+;
if(ls>=k) o=ch[o][];
else if(ls+ns>=k) {k-=ls;break;}
else k-=(ls+ns),o=ch[o][];
}
return lx[o]+k-;
}
int get_rank_of_user(int x)
{
P2 t=*ma.lower_bound(P(x,));
return get_rank(t.second)+x-lx[t.second];
}
int main()
{
int i,idx,x,y,t,lans=;P t1,t2;
for(i=;i<N;++i) q.push(i);
scanf("%d%d",&n,&m);
root=getnode();lx[root]=;rx[root]=n;sz[root]=n;ma.insert(P2(P(n,),root));
for(i=;i<=m;i++)
{
scanf("%d",&idx);
if(idx==)
{
scanf("%d%d",&x,&y);x-=lans;y-=lans;lans=get_rank_of_user(x)+;
split_node_of_user(x);t=ma[P(x,x)];lx[t]=rx[t]=y;
ma[P(y,y)]=t;ma.erase(P(x,x));
printf("%d\n",lans);
}
else if(idx==)
{
scanf("%d",&x);x-=lans;lans=get_rank_of_user(x)+;
split_node_of_user(x);t=get_rank(ma[P(x,x)]);
t1=split(root,t);t2=split(t1.second,);
root=merge(merge(t2.first,t1.first),t2.second);
printf("%d\n",lans);
}
else if(idx==)
{
scanf("%d",&x);x-=lans;lans=get_rank_of_user(x)+;
split_node_of_user(x);t=get_rank(ma[P(x,x)]);
t1=split(root,t);t2=split(t1.second,);
root=merge(merge(t1.first,t2.second),t2.first);
printf("%d\n",lans);
}
else if(idx==)
{
scanf("%d",&x);x-=lans;
printf("%d\n",find_kth(x));
}
}
return ;
}
AC代码。AC代码与上面一份代码唯一的区别是在第147行多了一句更新lastans...而且常数巨大233333
#include<cstdio>
#include<algorithm>
#include<map>
#include<queue>
#define N 300005
using namespace std;
typedef pair<int,int> P;
typedef pair<P,int> P2; int lx[N],rx[N],sz[N],fa[N],ch[N][],r[N];
map<P,int> ma;
queue<int> q;
int root;
int rand1()
{
static int x=;
return x=(48271LL*x+)%;
}
int getnode()
{
int t=q.front();q.pop();r[t]=rand1();
lx[t]=rx[t]=sz[t]=fa[t]=ch[t][]=ch[t][]=;
return t;
}
void delnode(int x) {q.push(x);}
void upd(int x) {sz[x]=sz[ch[x][]]+sz[ch[x][]]+rx[x]-lx[x]+;} P split(int a,int n)
{
if(!a) return P(,);
int ls=sz[ch[a][]];P t;
if(n<=ls)
{
t=split(ch[a][],n);ch[a][]=t.second;
if(ch[a][]) fa[ch[a][]]=a;
upd(a);t.second=a;
}
else
{
t=split(ch[a][],n-ls-(rx[a]-lx[a]+));ch[a][]=t.first;
if(ch[a][]) fa[ch[a][]]=a;
upd(a);t.first=a;
}
return t;
} int merge(int a,int b)
{
if(!a||!b) return a+b;
if(r[a]<r[b])
{
ch[a][]=merge(ch[a][],b);upd(a);
if(ch[a][]) fa[ch[a][]]=a;
return a;
}
else
{
ch[b][]=merge(a,ch[b][]);upd(b);
if(ch[b][]) fa[ch[b][]]=b;
return b;
}
}
int n,m;
int& get_ref(int x)
{
if(x==root) return root;
if(x==ch[fa[x]][]) return ch[fa[x]][];
return ch[fa[x]][];
} void split_node_of_user(int x)
{
P2 t;int l,r,t1,t2,t3,t4,t5,oo;
t=*ma.lower_bound(P(x,));ma.erase(t.first);
l=t.first.second;r=t.first.first;int &o=get_ref(t.second);
t1=,t2=,t3=,t4=ch[o][],t5=ch[o][];
if(x>l) {t1=getnode();lx[t1]=l;rx[t1]=x-;sz[t1]=x-l;}
t2=getnode();lx[t2]=rx[t2]=x;sz[t2]=;
if(x<r) {t3=getnode();lx[t3]=x+;rx[t3]=r;sz[t3]=r-x;}
oo=o;o=merge(merge(t4,t1),merge(merge(t2,t3),t5));fa[o]=fa[oo];
delnode(oo);
if(x>l) ma[P(x-,l)]=t1;
ma[P(x,x)]=t2;
if(x<r) ma[P(r,x+)]=t3;
}
int get_rank(int o)
{
int ans=sz[ch[o][]];
while(o!=root)
{
if(o==ch[fa[o]][]) ans+=rx[fa[o]]-lx[fa[o]]++sz[ch[fa[o]][]];
o=fa[o];
}
return ans;
}
int find_kth(int k)
{
int o=root,ls,ns;
while()
{
ls=sz[ch[o][]];ns=rx[o]-lx[o]+;
if(ls>=k) o=ch[o][];
else if(ls+ns>=k) {k-=ls;break;}
else k-=(ls+ns),o=ch[o][];
}
return lx[o]+k-;
}
int get_rank_of_user(int x)
{
P2 t=*ma.lower_bound(P(x,));
return get_rank(t.second)+x-lx[t.second];
}
int main()
{
int i,idx,x,y,t,lans=;P t1,t2;
for(i=;i<N;++i) q.push(i);
scanf("%d%d",&n,&m);
root=getnode();lx[root]=;rx[root]=n;sz[root]=n;ma.insert(P2(P(n,),root));
for(i=;i<=m;i++)
{
scanf("%d",&idx);
if(idx==)
{
scanf("%d%d",&x,&y);x-=lans;y-=lans;lans=get_rank_of_user(x)+;
split_node_of_user(x);t=ma[P(x,x)];lx[t]=rx[t]=y;
ma[P(y,y)]=t;ma.erase(P(x,x));
printf("%d\n",lans);
}
else if(idx==)
{
scanf("%d",&x);x-=lans;lans=get_rank_of_user(x)+;
split_node_of_user(x);t=get_rank(ma[P(x,x)]);
t1=split(root,t);t2=split(t1.second,);
root=merge(merge(t2.first,t1.first),t2.second);
printf("%d\n",lans);
}
else if(idx==)
{
scanf("%d",&x);x-=lans;lans=get_rank_of_user(x)+;
split_node_of_user(x);t=get_rank(ma[P(x,x)]);
t1=split(root,t);t2=split(t1.second,);
root=merge(merge(t1.first,t2.second),t2.first);
printf("%d\n",lans);
}
else if(idx==)
{
scanf("%d",&x);x-=lans;lans=find_kth(x);
printf("%d\n",lans);
}
}
return ;
}
从洛谷掏的数据233333
n : : : : : : : : : : : : :
具体思路跟NOIP2017D2T3很像....也可以当做平衡树动态开点的某种通用方法...不过细节跟线段树动态开点比的话就23333...
至于具体动态查询编号对应排名的话,用map记录编号对应的节点编号(或一段连续编号对应的同一个节点编号,[l,r]这一段连续编号用P(r,l)表示),然后非旋treap维护序列,记录一下每个节点的父节点,这样就可以根据节点编号查询排名了
(记一下64到85行)
洛谷 P3285 [SCOI2014]方伯伯的OJ的更多相关文章
- 洛谷P3285 [SCOI2014]方伯伯的OJ 动态开点平衡树
洛谷P3285 [SCOI2014]方伯伯的OJ 动态开点平衡树 题目描述 方伯伯正在做他的 \(Oj\) .现在他在处理 \(Oj\) 上的用户排名问题. \(Oj\) 上注册了 \(n\) 个用户 ...
- 洛谷 P3285 - [SCOI2014]方伯伯的OJ(平衡树)
洛谷题面传送门 在酒店写的,刚了一整晚终于调出来了-- 首先考虑当 \(n\) 比较小(\(10^5\) 级别)的时候怎么解决,我们考虑将所有用户按排名为关键字建立二叉排序树,我们同时再用一个 map ...
- 洛谷P3286 [SCOI2014]方伯伯的商场之旅
题目:洛谷P3286 [SCOI2014]方伯伯的商场之旅 思路 数位DP dalao说这是数位dp水题,果然是我太菜了... 自己是不可能想出来的.这道题在讲课时作为例题,大概听懂了思路,简单复述一 ...
- luogu P3285 [SCOI2014]方伯伯的OJ splay 线段树
LINK:方伯伯的OJ 一道稍有质量的线段树题目.不写LCT splay这辈子是不会单独写的 真的! 喜闻乐见的是 题目迷惑选手 \(op==1\) 查改用户在序列中的位置 题目压根没说位置啊 只有排 ...
- 洛谷 P3287 - [SCOI2014]方伯伯的玉米田(BIT 优化 DP)
洛谷题面传送门 怎么题解区全是 2log 的做法/jk,这里提供一种 1log 并且代码更短(bushi)的做法. 首先考虑对于一个序列 \(a\) 怎样计算将其变成单调不降的最小代价.对于这类涉及区 ...
- 洛谷P3287 [SCOI2014]方伯伯的玉米田(树状数组)
传送门 首先要发现,每一次选择拔高的区间都必须包含最右边的端点 为什么呢?因为如果拔高了一段区间,那么这段区间对于它的左边是更优的,对它的右边会更劣,所以我们每一次选的区间都得包含最右边的端点 我们枚 ...
- 洛谷3288 SCOI2014方伯伯运椰子(分数规划+spfa)
纪念博客又一次爆炸了 首先,对于本题中,我们可以发现,保证存在正整数解,就表示一定费用会降低.又因为一旦加大的流量,费用一定会变大,所以总流量一定是不变的 那么我们这时候就需要考虑一个退流的过程 对于 ...
- BZOJ 3595: [Scoi2014]方伯伯的Oj SBT+可持久化Treap
3595: [Scoi2014]方伯伯的Oj Time Limit: 6 Sec Memory Limit: 256 MBSubmit: 102 Solved: 54[Submit][Status ...
- 洛谷 P3285 / loj 2212 [SCOI2014] 方伯伯的 OJ 题解【平衡树】【线段树】
平衡树分裂钛好玩辣! 题目描述 方伯伯正在做他的 OJ.现在他在处理 OJ 上的用户排名问题. OJ 上注册了 \(n\) 个用户,编号为 \(1\sim n\),一开始他们按照编号排名.方伯伯会按照 ...
随机推荐
- 怎样扩展EasyUI在页面中马上显示选中的本地图片
在编写前台页面的时候,有时须要将选中的图片夹杂着其它信息一起上传到服务端,在选着本地图片的时候,为了获得更好的效果,须要将该图片显示在页面上. 最初思路有两个.详细例如以下: 1.获取选中文件的二进制 ...
- EJB学习(三)——java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to..
在上一篇博客介绍了怎样使用使用Eclipse+JBOSS创建第一个EJB项目,在这期间就遇到一个错误: Exception in thread "main" java.lang.C ...
- swiper插件制作轮播图swiper2.x和3.x区别
swiper3.x仅仅兼容到ie10+.比較适合移动端. swiper3.x官网 http://www.swiper.com.cn/ swiper2.x能够兼容到ie7+.官网是http://swi ...
- Android开发——本地验证码的简易实现
0. 前言 验证码无处不在.有人问我,你知道达芬奇password以下是什么吗,对.答案就是达芬奇验证码. 验证码一个最基本的作用就是防止恶意暴力破解登录,防止不间断的登录尝试,事实上能够在se ...
- python爬虫(二)--了解deque
队列-deque 有了上面一节的基础.当然你须要全然掌握上一节的全部方法,由于上一节的方法.在以下的教程中 会重复的用到. 假设你没有记住,请你返回上一节. http://blog.csdn.net/ ...
- JMeter 系列之—-01使用
用Jmeter 做压测,总体与LoadRunner 类似: 一.线程组 1. 线程数 2. 循环次数 单个线程循环次数 3. Ramp-up Period(in seconds) [1]决定多长时间启 ...
- 提升Android编译速度
Android codebase都非常大.编译一次都须要花非常多时间.假设是preloader/lk/bootimage还好,可是Android的话都是非常久. 实际上这个编译时间还是能够进一步缩短! ...
- 图像配准建立仿射变换模型并用RANSAC算法评估
当初选方向时就由于从小几何就不好.缺乏空间想像能力才没有选择摄影測量方向而是选择了GIS. 昨天同学找我帮他做图像匹配.这我哪里懂啊,无奈我是一个别人有求于我,总是不好意思开口拒绝的人.于是乎就看着他 ...
- EJB学习笔记六(EJB中的拦截器)
1.前言 听到拦截器,预计都不陌生,尤其是在Servlet规范中,充分应用了拦截器的概念.EJB3也提供了拦截器的支持,本质上是轻量级的AOP实现.拦截器能够将多个业务方法中的通用逻辑从业务方法中抽 ...
- Mac下安装manen
下载好maven,放到特定目录下: 打开终端: 进入根目录: cd ~ 创建文件.bash_profile: vi .bash_profile 编辑文件添加内容 MAVEN_HOME=/Users/c ...