zoukankan      html  css  js  c++  java
  • 安利一下近期做的几道线段树入门题

    写了几道线段树入门题以后的我感觉会了点东西~

    放几道有代表性的。

    P.S.洛谷的题号

    P3372模板

    这个不用说了。

    P1558色板游戏

    状压,区间或,裸题。

    P2471降雨量

    思路不难,细节很多。

    P2572序列操作

    题意

    长度为n的01序列,m次操作

    0 a b 把[a, b]区间内的所有数全变成0

    1 a b 把[a, b]区间内的所有数全变成1

    2 a b 把[a,b]区间内的所有数全部取反,也就是说把所有的0变成1,把所有的1变成0

    3 a b 询问[a, b]区间内总共有多少个1

    4 a b 询问[a, b]区间内最多有多少个连续的1

    n,m<=100 000

    细节更多,更麻烦,对于每个节点要维护好多值好多特判。

    这个题的sign传递十分巧妙。

    解法

    首先 如果只有操作 0,1,3 这就没什么技术含量了

    每个节点的sign,-1,0,1,2,代表这个区间里的状态,如果修改是 2 就可以  抵消掉当前的sign2 ,或者把sign1变0,0变1

    然后每个点存一个 sum,sumr0,sumr1,suml0,suml1,max0,max1,在询问时,根据相应的sign 可以 导出答案

    P2824排序

    题意:给出一个1到n的全排列,现在对这个全排列序列进行m次局部排序,排序分为两种:1:(0,l,r)表示将区间[l,r]的数字升序排序2:(1,l,r)表示将区间[l,r]的数字降序排序最后询问第q位置上的数字。 n,m <= 30 000

    十分有趣的一道题。

    看题解用二分+线段树check 写我也是惊了,思路奇特。

    解法

    二分答案,然后把大于等于答案的数赋成1,其余的赋成0,

    每次排序就等同于把1堆在一边,0堆在一边,这个能够拿线段树实现

    排序完就可以得到答案和当前二分到的答案的大小关系了->那么继续二分

    P3415祭坛

    题超有意思! 可是好简单 =、= 

    坐标离散化。

    持续更新中。。。

  • 相关阅读:
    nyoj 202红黑树 (搜索)
    POJ 3281 Dining(最大流)
    nyoj-488 素数环 +nyoj -32 组合数 (搜索)
    LeetCode100:Same Tree
    LeetCode283:Move Zeros
    Leetcode226:Invert Binary Tree
    LeetCode258:Add Digits
    Leetcode237:Delete Node in a Linked List
    LeetCode7:Reverse Integer
    LeetCode292:Nim Game
  • 原文地址:https://www.cnblogs.com/Elfish/p/8016182.html
Copyright © 2011-2022 走看看