上一页 1 ··· 41 42 43 44 45 46 47 48 49 ··· 57 下一页

2011年7月17日

线段树之四

摘要: #include <iostream> //poj 2528 Mayor's posters#include <algorithm>using namespace std;int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b;}struct segment{ int l; int r; int color; //该节点中被覆盖的元线段数 }poster[80000]; //树节点int origin[80000][2]; //原始输入数据bool flag[10000010]; //标志 阅读全文

posted @ 2011-07-17 02:00 sysu_mjc 阅读(175) 评论(0) 推荐(0) 编辑

线段树之三

摘要: #include <iostream> //poj 3468 A Simple Problem with Integersusing namespace std;struct segment{ __int64 l,r,sum,off; //当覆盖范围为整个区间时,off记录此时的偏移量,默认为0 }tree[400000];__int64 arr[100005],c; //数据类型 __int64 ,long long 都可以void built_tree(__int64 n,__int64 s,__int64 t){ tree[n].l=s;tree[n].r=t; if(s== 阅读全文

posted @ 2011-07-17 01:58 sysu_mjc 阅读(103) 评论(0) 推荐(0) 编辑

线段树之二

摘要: //poj 3667 Hotel#include<iostream> //线段树,求连续区间的长度using namespace std;struct node{ int l,r,blank; int lb,rb; //lb(rb)记录从左(右)端点开始的连续空的线段长}tree[2000000];void build_tree(int n,int s,int t){ tree[n].l=s;tree[n].r=t; tree[n].blank=tree[n].lb=tree[n].rb=t-s+1; if(s<t) { int mid=(s+t)>>1; bui 阅读全文

posted @ 2011-07-17 01:56 sysu_mjc 阅读(149) 评论(0) 推荐(0) 编辑

线段树之一

摘要: #include <iostream> //poj 3264 线段树,求区间的最值问题using namespace std;struct segment{ int max,min;}table[200000];int arr[50005],MAX,MIN;void built_tree(int s,int t,int n){ if(s==t) table[n].max=table[n].min=arr[s]; else { int mid=(s+t)/2; built_tree(s,mid,2*n); ... 阅读全文

posted @ 2011-07-17 01:55 sysu_mjc 阅读(156) 评论(0) 推荐(0) 编辑

树状数组之四

摘要: #include <iostream> //POJ 2155 Matrix 树状数组using namespace std;int tree[1001][1001],n;int lowbit(int x) //lowbit函数是计算x表示二进制,从最低位开始向左数,第一个不为0的数字的权值,比如x=6=110,则返回2{ return x&(-x);}void modify(int x, int y) //求up(x,y){ int i=x; while(i<=n) { int j=y; while(j<=n) { tree[i][j]++; j+=lowbit 阅读全文

posted @ 2011-07-17 01:54 sysu_mjc 阅读(139) 评论(0) 推荐(0) 编辑

树状数组之三

摘要: //poj 2481 Cows#include <iostream> //树状数组#include <algorithm>using namespace std;const int maxn=100005;int table[maxn],num[maxn],repeat[maxn],n,i;struct Cow { int st,ed; int pos; bool operator<(const Cow& c) const //ed按降序排,若相同则按st升序排;用一维的树状数组table[]来处理。 { if(ed==c.ed) return st< 阅读全文

posted @ 2011-07-17 01:53 sysu_mjc 阅读(86) 评论(0) 推荐(0) 编辑

树状数组之二

摘要: //poj 1195 Mobile phones#include <iostream> //简单二维树状数组using namespace std;int table[1025][1025]; //初始化为0int S,X,Y,A,L,B,R,T,side;int lowbit(int x){ return x&(-x);}void modify(int x,int y,int a){ x++;y++; //使得表下标的最小值从1而不是从0开始 while(x<=side) { int j=y; while(j<=side) { table[x][j]+=a; 阅读全文

posted @ 2011-07-17 01:52 sysu_mjc 阅读(96) 评论(0) 推荐(0) 编辑

树状数组之一

摘要: #include <iostream>using namespace std;int side;int C[side]; //一维 C[1]-C[side]int lowbit(int x) { return x&(-x);}void modify(int k,int m) //修改原数组a[k]中某一元素的值{ while(k<=side) { C[k] += m; k += lowbit(k); }}//由于lowbit(0)=0,导致modify(0,m)发生死循环,所以树状数组中可能出现0时,我们都全部加1int sum(int k) //求和,求原数组元素a 阅读全文

posted @ 2011-07-17 01:51 sysu_mjc 阅读(164) 评论(0) 推荐(0) 编辑

Dijkstra算法之六----邻接链表+优先队列实现Dijkstra算法

摘要: //poj 1511 Invitation Cards#include<iostream> //Dijkstra+邻接链表+优先队列 1735MS!#include<queue>#define maxn 1000002using namespace std;struct Edge { int v; int weight; int next;}Vertex[maxn];int head[maxn],curr; const __int64 inf=(__int64)1<<63-1; int cases,p,e,i,j,edge[maxn][3];void gra 阅读全文

posted @ 2011-07-17 01:50 sysu_mjc 阅读(419) 评论(0) 推荐(0) 编辑

Dijkstra算法之五----邻接链表+优先队列实现Dijkstra算法

摘要: //邻接链表+优先队列 实现Dijstra 算法//poj 3159 Candies//在满足b1-a1<=c1,b2-a1<=c2...的情况下,flymouse( N )希望自己分得的糖果数尽量多于snoopy( 1 )//b-a<=c不等式正好可以构成最短路的三角不等式:dv <= du + w(u,v)//比如顶点A,B,C有如下关系:db-da<=2,dc-da<=5,dc-db<=2,构成一三角形ABC,//AB(A指向B),AC(A指向C),BC(B指向C),由dc-db<=2,db-da<=2,知dc<=db+2,db 阅读全文

posted @ 2011-07-17 01:47 sysu_mjc 阅读(707) 评论(0) 推荐(0) 编辑

上一页 1 ··· 41 42 43 44 45 46 47 48 49 ··· 57 下一页

导航