题意:令a[l..r]都+1,求a[1..n]的最大值

裸的成段更新+区间最值,但是本题坐标范围很大(10^9),所以需要离散化

顺便离散化模板get

离散化的基本思路:

设一共有m个数,范围1--n  (n>>m)

先用数组X[1..m]存下这些数,然后对X从小到大排序

每次读入一个数p时,在X中二分查找p,p在数组X中的位置对应的数组下标就是p离散化之后的值

这样就成功把范围1--n的数压缩到了1--m以内。

 #include <cstdio>
 #include <cstring>
 #include <cstdlib>
 #include <algorithm>

 #define lson l, m, rt << 1
 #define rson m + 1, r, rt << 1 | 1
 #define lc rt << 1
 #define rc rt << 1 | 1

 using namespace std;

 ;

 struct node
 {
     int l, r;
 };

 node D[MAXN];
 int limit, Q;
  ];
  ];
 int N;
 int X[MAXN];

 void build( int l, int r, int rt )
 {
     maxi[rt] = lazy[rt] = ;
     if ( l == r ) return;
     ;
     build( lson );
     build( rson );
     return;
 }

 void PushUp( int rt )
 {
     maxi[rt] = max( maxi[lc], maxi[rc] );
     return;
 }

 void PushDown( int rt )
 {
     if ( lazy[rt] )
     {
         lazy[lc] += lazy[rt];
         lazy[rc] += lazy[rt];
         maxi[lc] += lazy[rt];
         maxi[rc] += lazy[rt];
         lazy[rt] = ;
     }
     return;
 }

 void update( int L, int R, int l, int r, int rt )
 {
     if ( L <= l && r <= R )
     {
         lazy[rt] += ;
         maxi[rt] += ;
         return;
     }
     PushDown( rt );
     ;
     if ( L <= m ) update( L, R, lson );
     if ( R > m )  update( L, R, rson );
     PushUp( rt );
     return;
 }

 int query( int L, int R, int l, int r, int rt )
 {
     if ( L <= l && r <= R )
     {
         return maxi[rt];
     }
     PushDown( rt );
     ;

     ;
     if ( L <= m ) res = max( res, query( L, R, lson ) );
     if ( R > m )  res = max( res, query( L, R, rson ) );
     PushUp( rt );
     return res;
 }

 int Bin(int key,int n,int X[]) {
           , r = n - ;
          while (l <= r) {
                  ;
                  if (X[m] == key) return m;
                  ;
                  ;
          }
          ;
 }

 int main()
 {
     int T;
     scanf( "%d", &T );
     while ( T-- )
     {
         scanf( "%d", &Q );
         ;
         N = ;
         ; i < Q; ++i )
         {
             int u, v;
             scanf( "%d%d", &u, &v );
             if (v>N) N=v;
             D[i].l = u, D[i].r = v;
             X[nnd++]=u;
             X[nnd++]=v;
         }
         //build( 1, N, 1 );
         //for (int i=0;i<Q;i++)
         //    update( D[i].l, D[i].r, 1, N, 1 );

                  sort(X , X + nnd);
                  ;
                   ; i < nnd; i ++) {
                           ]) X[m ++] = X[i];
                  }
                   ; i >  ; i --) {
                           ] + ) X[m ++] = X[i-] + ;
                  }
                  sort(X , X + m);
                  build(,m-,);
                   ; i < Q ; i ++) {
                           int l = Bin(D[i].l, m, X);
                           int r = Bin(D[i].r, m, X);
                           update(l, r , , m - , );
                  }

         //int ans = query( 1, N , 1, N, 1 );
         ,m-,,m-,);
         printf( "%d\n", ans);
         //update( D[i].l, D[i].r, 1, N, 1 );
     }
     ;
 }

hdu5124 线段树+离散化的更多相关文章

  1. POJ 2528 Mayor&#39;s posters(线段树+离散化)

    Mayor's posters 转载自:http://blog.csdn.net/winddreams/article/details/38443761 [题目链接]Mayor's posters [ ...

  2. poj 2528 Mayor&#39;s posters(线段树+离散化)

    /* poj 2528 Mayor's posters 线段树 + 离散化 离散化的理解: 给你一系列的正整数, 例如 1, 4 , 100, 1000000000, 如果利用线段树求解的话,很明显 ...

  3. [poj2528] Mayor&#39;s posters (线段树+离散化)

    线段树 + 离散化 Description The citizens of Bytetown, AB, could not stand that the candidates in the mayor ...

  4. [UESTC1059]秋实大哥与小朋友(线段树, 离散化)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1059 普通线段树+离散化,关键是……离散化后建树和查询都要按照基本法!!!RE了不知道多少次………………我真 ...

  5. POJ2528Mayor&#39;s posters[线段树 离散化]

    Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 59683   Accepted: 17296 ...

  6. HDU 3743 Frosh Week (线段树+离散化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3743 Frosh Week Time Limit : 2000/1000ms (Java/Other) ...

  7. 【HDU 1542】Atlantis(线段树+离散化,矩形面积并)

    求矩形面积并,离散化加线段树. 扫描线法: 用平行x轴的直线扫,每次ans+=(下一个高度-当前高度)*当前覆盖的宽度. #include<algorithm> #include<c ...

  8. 【POJ 2528】Mayor’s posters(线段树+离散化)

    题目 给定每张海报的覆盖区间,按顺序覆盖后,最后有几张海报没有被其他海报完全覆盖.离散化处理完区间端点,排序后再给相差大于1的相邻端点之间再加一个点,再排序.线段树,tree[i]表示节点i对应区间是 ...

  9. poj 2528 线段树+离散化

    题意:在墙上贴一堆海报(只看横坐标,可以抽象成一线段),新海报可以覆盖旧海报.求最后能看到多少张海报 sol:线段树成段更新.铺第i张海报的时候更新sg[i].x~sg[i].y这一段为i. 然而坐标 ...

随机推荐

  1. 谈初学Java历程

    学习Java一个月左右,本来很早就想好好静下心来写一点东西了.但由于不想手写,文档写了不知道放在哪好,所以一直拖着.最近注册了博客园,还是挺方便的. 即将大学毕业了,则面临了所以大学生所面临的问题,就 ...

  2. Java--正则表达式-简单的在字符串中找数字

    import org.junit.Test; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ...

  3. Maven 标签详解

    <span style="padding:0px; margin:0px"><project xmlns="http://maven.apache.or ...

  4. sql server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法

    启动SQL Server 2008 Management Studio 工具菜单----选项----Designers(设计器)----阻止保存要求重新创建表的更改  取消勾选即可.

  5. MySQL zabbix

    http://liqingbiao.blog.51cto.com/3044896/1712080

  6. 数据库中MyISAM与InnoDB区别

    数据库中MyISAM与InnoDB区别 首页 » DIY技术区 » 数据库中MyISAM与InnoDB区别 09:57:40   MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是I ...

  7. C# SQL优化 及 Linq 分页

    每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...

  8. Lib New

    gacutil /if E:\ThirdParty\RockyLib\Rocky\bin\Release\Rocky.dll gacutil /u Rocky partial class GmailF ...

  9. 不逃离WIndows,Asp.Net就只能写写进销存管理系统

    那个丹麦人把C#语言弄的再好,但是如果程序放进Windows+IIS这个容器,就有问题了. 我在I5+8G内存的机子上测试Windows2008+IIs,直接ab 2000并发压默认的HTML主页,还 ...

  10. delphi 11 编辑模式 浏览模式

    编辑模式 浏览模式 设置焦点 //在使用前需要Webbrowser已经浏览过一个网页 否则错误 uses MSHTML; ///获取Webbrowser编辑模式里面的内容procedure EditM ...