G - Periodic RMQ Problem

思路:

  题目给一段序列,然后序列复制很多次;

  维护序列很多次后的性质;

  线段树动态开点;

来,上代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define maxn 100005 struct TreeNodeType {
int l, r, mid, min, flag; TreeNodeType *lc, *rc; TreeNodeType()
{
flag=;
lc = NULL;
rc = NULL;
}
};
struct TreeNodeType *root, *rot; int n, k, m; inline void in(int &now)
{
char Cget = getchar(); now = ;
while (Cget > '' || Cget < '') Cget = getchar();
while (Cget >= ''&&Cget <= '')
{
now = now * + Cget - '';
Cget = getchar();
}
} void tree_build_ori(TreeNodeType *&now, int l, int r)
{
if (now == NULL)
{
now = new TreeNodeType;
now->l = l, now->r = r;
now->mid = (l + r) >> ;
}
if (l == r)
{
in(now->min);
return;
}
tree_build_ori(now->lc, l, now->mid);
tree_build_ori(now->rc, now->mid + , r);
now->min = min(now->lc->min, now->rc->min);
} int tree_query_ori(TreeNodeType *&now, int l, int r)
{
if (now->l == l&&now->r == r) return now->min;
if (l > now->mid) return tree_query_ori(now->rc, l, r);
else if (r <= now->mid) return tree_query_ori(now->lc, l, r);
else return min(tree_query_ori(now->lc, l, now->mid), tree_query_ori(now->rc, now->mid + , r));
} inline void tree_down(TreeNodeType *&now)
{
now->lc->min = now->flag;
now->lc->flag = now->flag;
now->rc->min = now->flag;
now->rc->flag = now->flag;
now->flag = ;
} int solve(int l, int r)
{
if(r-l+>=n) return rot->min;
l%=n,r%=n;
if(l==) l=n;
if(r==) r=n;
if(r<l) return min(tree_query_ori(rot, l, n), tree_query_ori(rot, , r));
else return tree_query_ori(rot,l,r);
} void tree_change(TreeNodeType *&now, int l, int r, int x)
{
if (now->l == l&&now->r == r)
{
now->min = x;
now->flag = x;
return;
}
if (now->rc == NULL)
{
now->rc = new TreeNodeType;
now->rc->l = now->mid + ;
now->rc->r = now->r;
now->rc->mid = (now->rc->r + now->rc->l) >> ;
now->rc->min = solve(now->rc->l, now->rc->r);
}
if (now->lc == NULL)
{
now->lc = new TreeNodeType;
now->lc->l = now->l;
now->lc->r = now->mid;
now->lc->mid = (now->lc->l + now->lc->r) >> ;
now->lc->min = solve(now->lc->l, now->lc->r);
}
if (now->flag) tree_down(now);
if (l > now->mid) tree_change(now->rc, l, r, x);
else if (r <= now->mid) tree_change(now->lc, l, r, x);
else
{
tree_change(now->lc, l, now->mid, x);
tree_change(now->rc, now->mid + , r, x);
}
now->min = min(now->lc->min, now->rc->min);
} int tree_query(TreeNodeType *&now, int l, int r)
{
if (now->l == l&&now->r == r) return now->min;
if (now->rc == NULL)
{
now->rc = new TreeNodeType;
now->rc->l = now->mid + ;
now->rc->r = now->r;
now->rc->mid = (now->rc->r + now->rc->l) >> ;
now->rc->min = solve(now->rc->l, now->rc->r);
}
if (now->lc == NULL)
{
now->lc = new TreeNodeType;
now->lc->l = now->l;
now->lc->r = now->mid;
now->lc->mid = (now->lc->l + now->lc->r) >> ;
now->lc->min = solve(now->lc->l, now->lc->r);
}
if (now->flag) tree_down(now);
if (l > now->mid) return tree_query(now->rc, l, r);
else if (r <= now->mid) return tree_query(now->lc, l, r);
else return min(tree_query(now->lc, l, now->mid), tree_query(now->rc, now->mid + , r));
now->min = min(now->lc->min, now->rc->min);
} int main()
{
root = NULL, rot = NULL; int op, l, r, x;
in(n), in(k), tree_build_ori(rot, , n), in(m);
root = new TreeNodeType;
root->l = , root->r = n*k, root->mid = + n*k >> , root->min = rot->min;
for (; m--;)
{
in(op), in(l), in(r);
if (op == ) printf("%d\n", tree_query(root, l, r));
else in(x),tree_change(root, l, r, x);
}
return ;
}

AC日记——Periodic RMQ Problem codeforces 803G的更多相关文章

  1. (WAWAWAWAWAWAW) G. Periodic RMQ Problem

    没有联通门 : Codeforces G. Periodic RMQ Problem /* Codeforces G. Periodic RMQ Problem MMP 什么动态开点线段树啊 ... ...

  2. codeforces 803G Periodic RMQ Problem

    codeforces 803G Periodic RMQ Problem 题意 长度为\(1e5\)的数组复制\(1e4\)次,对新的数组进行区间覆盖和区间最小值查询两种操作,操作次数\(1e5\). ...

  3. Codeforces 803G Periodic RMQ Problem 线段树

    Periodic RMQ Problem 动态开点线段树直接搞, 我把它分成两部分, 一部分是原来树上的, 一部分是后来染上去的,两个部分取最小值. 感觉有点难写.. #include<bits ...

  4. Codeforces 803G Periodic RMQ Problem ST表+动态开节点线段树

    思路: (我也不知道这是不是正解) ST表预处理出来原数列的两点之间的min 再搞一个动态开节点线段树 节点记录ans 和标记 lazy=-1 当前节点的ans可用  lazy=0 没被覆盖过 els ...

  5. Codeforces 803 G. Periodic RMQ Problem

    题目链接:http://codeforces.com/problemset/problem/803/G 大致就是线段树动态开节点. 然后考虑到如果一个点还没有出现过,那么这个点显然未被修改,就将这个点 ...

  6. AC日记——C’s problem(c) TYVJ P4746 (清北学堂2017冬令营入学测试第三题)

    P4746 C’s problem(c)   时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描述 小C是一名数学家,由于它自制力比 ...

  7. AC日记——Sign on Fence Codeforces 484e

    E. Sign on Fence time limit per test 4 seconds memory limit per test 256 megabytes input standard in ...

  8. AC日记——Andryusha and Socks Codeforces 780a

    A. Andryusha and Socks time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  9. AC日记——Sagheer, the Hausmeister codeforces 812b

    812B - Sagheer, the Hausmeister 思路: 搜索: 代码: #include <cstdio> #include <cstring> #includ ...

随机推荐

  1. 写一个quick sort

    #include <stdio.h> #include <stdlib.h> //int a[]={1000,10000,9,10,30,20,50,23,90,100,10} ...

  2. C#中窗体、MDI的使用心得

    1、Show()和ShowDialog()的差别,前者在执行之后,无需等待返回,多用于MDI窗体的显示(MDI窗体之间是并列的,可以随时切换,需要注意自己调整的页面的需求,是要并列,还是要等待其中一个 ...

  3. 架构师速成6.7-设计开发思路-uml 分类: 架构师速成 2015-07-29 18:25 157人阅读 评论(0) 收藏

    uml是什么东西?统一建模语言,一门语言,是用来进行软件设计的一门语言. 其实一门语言的诞生并不伟大,让大多数人都使用才足够伟大.uml就是一门伟大的语言,因为目前软件设计的唯一语言就是它. UML其 ...

  4. 使用Visual Studio 快速把 Json,Xml 字符串创建为一个实体类

  5. CTF python沙箱逃逸进阶题目

    future引用了python3的新特性,所以是不能直接回回显,得用print file函数可以读取. print(().__class__.__bases__[0].__subclasses__() ...

  6. Python 3基础教程6-for循环语句

    本文介绍另外一种循环语句,for循环,直接看例子. 用for实现打印1到9的数字. 方法一:写入一个列表,然后遍历列表 # 这里介绍 for循环# 打印1到9 exampleList = [1,2,3 ...

  7. Linux认知之旅【03 进一步了解Linux命令】!

    再仔细的研究一下命令,你会进一步提高提高对Linux的操作! 看完本文有空http://man.linuxde.net/转转!这是个好网站! 一.命令是什么? 计算机术语[command]:形容在对计 ...

  8. 【转载】Unity插件研究院之自动保存场景

    原文: http://wiki.unity3d.com/index.php?title=AutoSave  最近发现Unity老有自动崩溃的BUG. 每次崩溃的时候由于项目没有保存所以Hierarch ...

  9. LightGBM的并行优化--机器学习-周振洋

    LightGBM的并行优化 上一篇文章介绍了LightGBM算法的特点,总结起来LightGBM采用Histogram算法进行特征选择以及采用Leaf-wise的决策树生长策略,使其在一批以树模型为基 ...

  10. jQuery遍历 filter()方法

    实例 改变所有 div 的颜色,然后向类名为 "middle" 的类添加边框: $("div").css("background", &qu ...