线段树
文章平均质量分 65
nash142857
这个作者很懒,什么都没留下…
展开
-
HDU3820 最小割
完全没思绪,看了大牛博客的构图才慢慢懂了。。太想不到啊#include#includeconst int inf=99999999;int t,n,m,s,cnt,G,S,sum,T;int a[60][60],b[60][60],head[10000],gap[10000],d[10000];struct EDGE{ int to,f,nxt;}edge[500000];int原创 2012-09-02 21:39:49 · 617 阅读 · 0 评论 -
hdu1823 二维线段树
第一次写二维线段树,参考了别人代码,主要思路是类似于一维线段树,只不过线段二分思想变成了矩阵四分。#include#includeint seg[8000*800],n;int max(int a,int b){ return a>b?a:b;}void ud(int al,int ar,int hl,int hr,int a,int h,int d,int i){原创 2012-09-19 18:23:14 · 849 阅读 · 1 评论 -
POJ2155 二维线段树
二维线段树,不像hdu1823用4分搞定,这题4分会超时,用树套树即可#include#includebool seg[4010][4010];int n,m,T,ans;void udy(int i,int l,int r,int j,int y1,int y2){ if(l==y1&&r==y2) { seg[i][j]^=1; return; } int mid=(原创 2012-09-19 20:12:17 · 1395 阅读 · 0 评论 -
HDU 1823 二维线段树
第一次写二维线段树,参考了别人代码,主要思路是类似于一维线段树,只不过线段二分思想变成了矩阵四分。#include#includeint seg[8000*800],n;int max(int a,int b){ return a>b?a:b;}void ud(int al,int ar,int hl,int hr,int a,int h,int d,int i){原创 2012-09-19 18:21:27 · 631 阅读 · 0 评论 -
ZOJ1610+线段树
线段树成段覆盖:#include#include#define MAXN 10000int seg[4*MAXN],n,cnt[MAXN],col[MAXN];void down(int x){ if(seg[x]!=-1) { seg[2*x]=seg[2*x+1]=seg[x]; seg[x]=-1; }}void ud(int le,int re,int a,in原创 2012-09-17 23:10:02 · 1297 阅读 · 0 评论 -
ZOJ3381
DP+线段树,dp[i]记录从i开始的最大收益,dp[i]=s[i]+max(dp[x]|i+x[i]利用线段树维护个最大值就行了#include#define MAXN 50010#define max(a,b) ((a)>(b))?(a):(b)int n,s[MAXN],x[MAXN],y[MAXN];int seg[4*MAXN];int dp[MAXN];vo原创 2012-09-16 16:30:51 · 534 阅读 · 0 评论 -
POJ3225
这题目完全就是一个标记下传思想,通过这道题目,自己也对这思想了解的更为透彻了,异或标记和覆盖标记,-1表示区间可能在子区间覆盖,0表示没有,1表示有,异或标记覆盖区间要下传,通过fxor下传。然后开区间,闭区间就是用乘以2,因为开区间要-1或则+1表示,奇数表示开,偶数表示闭,看了解题报告,还写了那么久#includeint c[1600000],x[1600000];int hash[140原创 2012-08-25 18:48:52 · 1306 阅读 · 0 评论 -
POJ2528
这道线段树题目应该对我离散化数据的思想有了启蒙,直接做必然超时超内存,所以根据虽然l,r范围好大,但给的海报数n#include#include#include #includeusing namespace std;mapmp;setst; int cmp(int a,int b){ return a<b;}int a[80010],c[80010],x[10010]原创 2012-08-25 18:49:47 · 1331 阅读 · 0 评论 -
hdu3308
发现区间合并总之就那点套路,无非就是另开2个数组多记录区间左值和右值,再注意合并即可。#includeint si[500000],li[500000],ri[500000],l[500000],r[500000];struct node{ int le; int re; int se;};int max(int a,int b){ r原创 2012-08-25 18:47:53 · 920 阅读 · 0 评论 -
ZOJ3511
暴力竟然过了、、利用vector记录每个多边形顶点,明天看别的解法,mark下(据说线段树)#include#includeusing namespace std;vectorvt[10005];int c[10005];int n,m;int main(){ while(scanf("%d%d",&n,&m)!=EOF) {原创 2012-09-23 02:29:14 · 526 阅读 · 0 评论