随笔分类 -  数据结构

摘要:以前的写法太挫了,现在改了一下,精简了View Code #include<stdio.h> #include<string.h> const int MAX = 10010; #define fi(a, b, c) for(int a = (b) ; a < (c) ; a++) #define FI(a, b, c) for(int a = (b) ; a <= (c) ; a++) #define fe(a,b) for(int a=(b); a; a = nxt[a]) int f[MAX],nxt[2*MAX],pnt[2*MAX],h[MAX], 阅读全文
posted @ 2011-10-24 16:37 Because Of You 阅读(290) 评论(0) 推荐(0)
摘要:View Code 需要离散化,但用map就方便多了了#include<stdio.h>#include<string.h>#include<map>using namespace std;const int maxn = 10010;int rank[maxn],p[maxn];int n,m;void init(){ int i; for(i=0;i<=10000;i++) { p[i]=i; rank[i]=0; }}int find(int x){ if(p[x]==x) return x; int tx=fi... 阅读全文
posted @ 2011-10-14 21:36 Because Of You 阅读(347) 评论(0) 推荐(0)
摘要:第一次做,模仿着敲的View Code #include<stdio.h>#include<string.h>#define maxn 1000000struct que{ int x,val; que(int xx,int yy):x(xx),val(yy){} que(){};}q[maxn];int main(){ int t; char name[6],na[10]; int rp; scanf("%d",&t); while(t--) { int i,j,k,head=0,tail=-1,leave=0,K=1; ... 阅读全文
posted @ 2011-10-13 16:36 Because Of You 阅读(317) 评论(0) 推荐(0)
摘要:View Code #include<stdio.h>#include<string.h>int n,m;int p[1101000];int id[1101000];int vis[1100010];void init(){int i;memset(vis,0,sizeof(vis));for(i=0;i<=n;i++){p[i]=i;id[i]=i;}}int find(int x){return x==p[x]?x:p[x]=find(p[x]);}void unio(int x,int y){ int tx=find(x);int ty=find(y);i 阅读全文
posted @ 2011-10-07 20:15 Because Of You 阅读(441) 评论(0) 推荐(0)
摘要:View Code #pragma warning (disable : 4786)#include<stdio.h>#include<map>#include<string>#include<iostream>using namespace std;int main(){ char str[50]; double num=0; map<string,int> M; while(gets(str)!=NULL) { M[str]++; num++; } map<string,int>::iterator it; for.. 阅读全文
posted @ 2011-10-04 21:54 Because Of You 阅读(228) 评论(0) 推荐(0)
摘要:View Code #include<stdio.h>#include<string.h>#define max 100010 int b[max],c[max];__int64 x[max],y[max];int a[max];int lowbit(int x){ return x&(-x);}void update(int arr[],int x){ while(x<=max) { arr[x]++; x+=lowbit(x); }}__int64 sum(int arr[],int x){ __int64 ans=0; wh... 阅读全文
posted @ 2011-09-29 17:15 Because Of You 阅读(288) 评论(0) 推荐(0)
摘要:一个人的旅行Time Limit : 1000/1000ms (Java/Other)Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 28Accepted Submission(s) : 7Font: Times New Roman | Verdana | GeorgiaFont Size: ← →Problem Description虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽 阅读全文
posted @ 2011-09-26 12:26 Because Of You 阅读(434) 评论(0) 推荐(0)
摘要:View Code #include<stdio.h>#include<string.h>int c[50010];char str[50010];int n,m;int lowbit(int x){ return x&(-x);}void update(int x,int d){ while(x<=n) { c[x]+=d; x+=lowbit(x); }}int sum(int x){ int ans=0; while(x>0) { ans+=c[x]; x-=lowbit(x); } ... 阅读全文
posted @ 2011-09-23 21:51 Because Of You 阅读(357) 评论(0) 推荐(0)
摘要:Fruit NinjaTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 374Accepted Submission(s): 197Problem DescriptionRecently, dobby is addicted in the Fruit Ninja. As you know, dobby is a free elf, so unlike other elves, he could do whatever he wants.But t 阅读全文
posted @ 2011-09-23 12:00 Because Of You 阅读(449) 评论(0) 推荐(0)
摘要:请看几段区间1 --------------2 -------------3 --------4 -----先按y排序,再按x排序;排好序后就跟stars那题一样了一次遍历排序后的数组,由于比当前遍历元素strong的区间只可能存在于已经遍历过的元素中;所以我们可以放心大胆的直接对树状数组求和然后向后更新树状数组中统治x的点上的值,因为那些位置都多了一个比 以他们为左端点的区间 强壮 的区间;然后注意一下相同区间的处理即可跑了1157ms的代码。其实感觉也蛮快的了*-*View Code #include<stdio.h>#include<string.h>#inclu 阅读全文
posted @ 2011-09-20 23:49 Because Of You 阅读(436) 评论(0) 推荐(0)
摘要:View Code #include<stdio.h>#include<string.h>const int MAX=8010;#define L(x) x<<1#define R(x) x<<1|1#define MID(x,y) (x+y)>>1struct { int l,r,col;}node[MAX*4];int seg[MAX],col[MAX];void init(){ memset(node,0,sizeof(node)); memset(col,-1,sizeof(col));}void build(int t,in 阅读全文
posted @ 2011-09-08 20:52 Because Of You 阅读(394) 评论(0) 推荐(1)
摘要:有n台坏掉电脑,有两种操作,O表示修好一台电脑,修好后就可以更新与其它已修好的电脑的关系了,即如果与某台已经修好的电脑在可以连接的范围内,则两台电脑建立联系,另一种操作是询问,直接找根节点就好。。。。是水题啊,不过有一些细节要注意啊。View Code #include<stdio.h>#include<string.h>#define MAX 1050struct node{ int x,y;}com[MAX];int fa[MAX],repaired[MAX];int n,d,tot;void init(){ for(int i=1;i<=n;i++) fa[ 阅读全文
posted @ 2011-09-04 19:02 Because Of You 阅读(199) 评论(0) 推荐(0)
摘要:两种操作,叠立方体,数某个立方体下面有几个立方体;操作次数很多,采用并查集实现其中above[i]表示在 i 上面的立方体个数sum[i]表示根节点i下面的立方体个数,包括i所以x下面的立方体个数就等于x的根节点下面的总的立方体个数减去x上面的立方体个数(直接记录x的下面的立方体个数貌似有难度)View Code #include<stdio.h>#include<string.h>#define MAX 30010int fa[MAX],sum[MAX],above[MAX];void init(){ for(int i=0;i<=30000;i++) { fa 阅读全文
posted @ 2011-09-04 16:53 Because Of You 阅读(374) 评论(0) 推荐(0)
摘要:一般的种类并查集,只不过犯了点小错误,一直TLEView Code #include<stdio.h>#include<string.h>int fa[100005],rank[100005],n;void init(){ for(int i=1;i<=n;i++) { fa[i]=i; rank[i]=0; }}int find(int x){ if(fa[x]==x) return x; int tx=find(fa[x]); rank[x]=(rank[x]+rank[fa[x]])%2; fa[x]=tx; ... 阅读全文
posted @ 2011-09-04 16:07 Because Of You 阅读(212) 评论(0) 推荐(0)
摘要:How Many Answers Are WrongTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 521Accepted Submission(s): 213Problem DescriptionTT and FF are ... friends. Uh... very very good friends -________-bFF is a bad boy, he is always wooing TT to play the follow 阅读全文
posted @ 2011-09-01 16:21 Because Of You 阅读(580) 评论(0) 推荐(0)
摘要:水水的,心头暖暖的~~~其实线段树就像trie树,解题的关键都存在于结构域中View Code #include<stdio.h>#include<string.h>#define R(x) x<<1|1#define L(x) x<<1#define MID(x,y) (x+y)>>1#define max(a,b) a>b?a:bconst int MAX=200010;struct {int s,l,r;}node[3*MAX];int c[MAX];int get_val(){ int ret(0); char c; w 阅读全文
posted @ 2011-08-30 18:04 Because Of You 阅读(192) 评论(0) 推荐(0)
摘要:View Code //第一次做线段树,不怎么会,试着模仿别人的写法,修修改改//继续努力!!!//初始状态全为1,x,y,z代表把x->y区间改为z#include<stdio.h>#include<string.h>const int MAX=100010;#define L(x) x<<1#define R(x) x<<1|1#define MID(x,y) (x+y)>>1struct {int color,l,r;}node[3*MAX]; void treeinit(){ memset(node,0,sizeof(n 阅读全文
posted @ 2011-08-30 13:26 Because Of You 阅读(209) 评论(0) 推荐(1)
摘要:设想一个矩形,左上角坐标为(x1,y1),右下角坐标为(x2,y2),现在我们对其利用二维树状数组进行区间求和sum(x2,y2)表示0,0--》x2,y2大矩形求和,sum(x1-1,y2)表示0,0->x1-1,y2求和sum(x2,y1-1)、sum(x1-1,y1-1)同理,sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1)即为所求矩形内的和跟一维其实一样,形变而神不变View Code #include<stdio.h>#include<string.h>int n;int c[1025][1025]; 阅读全文
posted @ 2011-08-29 19:23 Because Of You 阅读(234) 评论(0) 推荐(0)
摘要:#include <stdio.h>#include<string.h>#define MAXN 200int flag[MAXN][MAXN];int c[MAXN][MAXN];int lowbit(int i){ return i & -i;}void update(int x, int y, int color){ if (color == flag[x][y]) return ; flag[x][y] = color; int i, j; for (i = x; i <= MAXN; i += lowbit(i)) for (... 阅读全文
posted @ 2011-08-29 16:40 Because Of You 阅读(476) 评论(0) 推荐(0)
摘要:Color the ballTime Limit:5000MS Memory Limit:65536KTotal Submit:126 Accepted:53DescriptionN个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗?Input每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 < 阅读全文
posted @ 2011-08-29 15:37 Because Of You 阅读(339) 评论(0) 推荐(0)