看到这题,第一眼:平衡树水题,随便做一做好了

然后....我在花了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的更多相关文章

  1. 洛谷P3285 [SCOI2014]方伯伯的OJ 动态开点平衡树

    洛谷P3285 [SCOI2014]方伯伯的OJ 动态开点平衡树 题目描述 方伯伯正在做他的 \(Oj\) .现在他在处理 \(Oj\) 上的用户排名问题. \(Oj\) 上注册了 \(n\) 个用户 ...

  2. 洛谷 P3285 - [SCOI2014]方伯伯的OJ(平衡树)

    洛谷题面传送门 在酒店写的,刚了一整晚终于调出来了-- 首先考虑当 \(n\) 比较小(\(10^5\) 级别)的时候怎么解决,我们考虑将所有用户按排名为关键字建立二叉排序树,我们同时再用一个 map ...

  3. 洛谷P3286 [SCOI2014]方伯伯的商场之旅

    题目:洛谷P3286 [SCOI2014]方伯伯的商场之旅 思路 数位DP dalao说这是数位dp水题,果然是我太菜了... 自己是不可能想出来的.这道题在讲课时作为例题,大概听懂了思路,简单复述一 ...

  4. luogu P3285 [SCOI2014]方伯伯的OJ splay 线段树

    LINK:方伯伯的OJ 一道稍有质量的线段树题目.不写LCT splay这辈子是不会单独写的 真的! 喜闻乐见的是 题目迷惑选手 \(op==1\) 查改用户在序列中的位置 题目压根没说位置啊 只有排 ...

  5. 洛谷 P3287 - [SCOI2014]方伯伯的玉米田(BIT 优化 DP)

    洛谷题面传送门 怎么题解区全是 2log 的做法/jk,这里提供一种 1log 并且代码更短(bushi)的做法. 首先考虑对于一个序列 \(a\) 怎样计算将其变成单调不降的最小代价.对于这类涉及区 ...

  6. 洛谷P3287 [SCOI2014]方伯伯的玉米田(树状数组)

    传送门 首先要发现,每一次选择拔高的区间都必须包含最右边的端点 为什么呢?因为如果拔高了一段区间,那么这段区间对于它的左边是更优的,对它的右边会更劣,所以我们每一次选的区间都得包含最右边的端点 我们枚 ...

  7. 洛谷3288 SCOI2014方伯伯运椰子(分数规划+spfa)

    纪念博客又一次爆炸了 首先,对于本题中,我们可以发现,保证存在正整数解,就表示一定费用会降低.又因为一旦加大的流量,费用一定会变大,所以总流量一定是不变的 那么我们这时候就需要考虑一个退流的过程 对于 ...

  8. BZOJ 3595: [Scoi2014]方伯伯的Oj SBT+可持久化Treap

    3595: [Scoi2014]方伯伯的Oj Time Limit: 6 Sec  Memory Limit: 256 MBSubmit: 102  Solved: 54[Submit][Status ...

  9. 洛谷 P3285 / loj 2212 [SCOI2014] 方伯伯的 OJ 题解【平衡树】【线段树】

    平衡树分裂钛好玩辣! 题目描述 方伯伯正在做他的 OJ.现在他在处理 OJ 上的用户排名问题. OJ 上注册了 \(n\) 个用户,编号为 \(1\sim n\),一开始他们按照编号排名.方伯伯会按照 ...

随机推荐

  1. Go---Redis连接池

    之前一篇文章介绍过使用redigo连接redis数据库处理,在使用中发现如果初始化一条链接连接redis做相关操作,使用中发现当两个程序交替使用redis时,先前建立的链接会断掉,只能每次操作的时候重 ...

  2. ScrollView阻尼效果

    activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...

  3. Find Minimum in Rotated Sorted Array 旋转数组中找最小值 @LeetCode

    O(n)的算法就不说了,这题主要考查的是 O(logn)的算法. 有序数组easy想到使用二分查找解决.这题就是在二分基础上做一些调整.数组仅仅有一次翻转,能够知道原有序递增数组被分成两部分,这俩部分 ...

  4. Codeforces Round #253 (Div. 1) A Borya and Hanabi

    A. Borya and Hanabi time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. php验证邮箱

    <?php if(isset($_POST['email'])){ $email = $_POST['email']; if(filter_var($email, FILTER_VALIDATE ...

  6. smartfoxserver扩展里面过滤聊天的不合法字符

    http://blog.csdn.net/yc7369/article/details/35567105 近期做手游客户要求加上一个聊天功能.事实上嘛,个人认为这个聊天功能比較鸡肋,这部分差点儿已经有 ...

  7. request.getAttribute()与request.setAttribute()

    request.getAttribute()与request.setAttribute() request.getAttribute("nameOfObj")可得到JSP页面一表单 ...

  8. 【Jquery】jQuery获取URL參数的两种方法

    jQuery获取URL參数的关键是获取到URL,然后对URL进行过滤处理,取出參数. location.href是取得URL.location.search是取得URL"?"之后的 ...

  9. .net面试整理

    NET程序员的层次:http://blog.csdn.net/dinglang_2009/article/details/6913852 .NET牛人应该知道些什么http://www.douban. ...

  10. 小贝_mysql数据库备份与恢复

    mysql数据库备份与恢复 简要:        一.数据库备份        二.数据库恢复 一.数据库备份 1.备份简单说明 : 系统执行中,增量备份与总体备份 例: 每周日总体备份一次,周一到周 ...