首页 > 其他分享 >洛谷P1816忠诚

洛谷P1816忠诚

时间:2024-11-18 23:10:42浏览次数:1  
标签:洛谷 int long P1816 忠诚 define

洛谷P1816 忠诚

思路

查询区间最小值,\(ST\)表/线段树板子题

代码

#include <bits/stdc++.h>
#define endl '\n'
#define int long long
const int maxn = 2e5 + 5;
const int inf = 0x7f7f7f7f;

struct custom_hash 
{
	static uint64_t splitmix64(uint64_t x) 
    {
		x ^= x << 13;
		x ^= x >> 7;
		x ^= x << 17;
		return x; 
	}
	size_t operator () (uint64_t x) const 
    {
		static const uint64_t FIXED_RANDOM = std::chrono::steady_clock::now().time_since_epoch().count(); // 时间戳
		return splitmix64(x + FIXED_RANDOM);
	}
};

int ans[maxn][32];
int nums[maxn];
// ans[i][i] --> [i, i + (2 ^ j) - 1]

int n = 0, m = 0;

void st()
{
    for (int i = 1; i <= n; i++)
    {
        ans[i][0] = nums[i];
    }
    int t = log2(n);
    for (int j = 1; j <= t; j++)
    {
        // i + (2 ^ j) - 1 <= n
        int m = n + 1 - (1 << j);
        for (int i = 1; i <= m; i++)
        {
            ans[i][j] = std::min(ans[i][j - 1], ans[i + (1 << (j - 1))][j - 1]);
        }
    }
}

int query(int l, int r)
{
    int tot = r - l + 1;
    int t = log2(tot);
    // x + (2 ^ tot) - 1 = r
    return std::min(ans[l][t], ans[r + 1 - (1 << t)][t]);
}

void solve()
{
    std::cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        std::cin >> nums[i];
    }
    st();
    int l = 0, r = 0;
    for (int i = 1; i <= m; i++)
    {
        std::cin >> l >> r;
        std::cout << query(l, r) << " ";
    }
}

signed main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr); std::cout.tie(nullptr);
    //freopen("out.txt", "w", stdout);
    int t = 1;
    //std::cin >> t;
    while(t--)
    {
        solve();
    }
    return 0;
}

标签:洛谷,int,long,P1816,忠诚,define
From: https://www.cnblogs.com/SteinsGateSg/p/18553940

相关文章

  • 洛谷P2068统计和
    P2068统计和思路单点修改+区间查询线段树/树状数组板子题代码#include<bits/stdc++.h>#defineendl'\n'#defineintlonglong#definelowbit(x)x&-xconstintmaxn=5e5+5;constintinf=0x7f7f7f7f;structcustom_hash{ staticuint64_tsplitmix64......
  • 洛谷P5057简单题
    P5057[CQOI2006]简单题这是题面思路每次操作,直接区间加\(1\),最后求结果的时候对\(2\)取余就好了这个题就是区间修改+单点查询可以用树状数组或者线段数维护代码#include<bits/stdc++.h>#defineendl'\n'#defineintlonglong#definelowbit(x)x&-xconstint......
  • 洛谷题单指南-二叉堆与树状数组-P1908 逆序对
    原题链接:https://www.luogu.com.cn/problem/P1908题意解读:求逆序对,前面介绍过归并排序的做法,参考:https://www.cnblogs.com/jcwy/p/184077,这里介绍树状数组的做法。解题思路:设数组a[n]里的整数只包括1~n,显然对于此题,可以通过离散化得到这样的数组。要计算逆序对,就是要计算对于......
  • 小寄巧——给洛谷题单快速生成一份目录
    以此题单为例,首先我们在浏览器中打开,F12切换到Console,输入document.querySelectorAll(".titlea"),然后复制返回的所有内容,粘贴到VSCode里,内容大致如下:NodeList(15)[a.title.color-default,a.title.color-default,a.title.color-default,a.title.color-default,a.title......
  • 洛谷P3538 [POI2012] OKR-A Horrible Poem
    前言比较典,可以当模板题,故记录一下,写的可能比较水。题意Link长度为\(n\(\leq6\times10^5)\)的字符串,有\(q\(\leq2\times10^6)\)个询问,每次询问求一个区间的最小循环节。思路题面看起来很唬人,我们平时求最短循环节都是用前缀函数,这一放在区间上就不会做了。但实际......
  • 洛谷 P3226 [HNOI2012] 集合选数 做题记录
    我们先建一个矩阵:\(\begin{bmatrix}1&2&4&8&16&32\\3&6&12&24&48&96\\9&18&36&72&144&288\\27&54&108&216&432&864\end{bmatrix}\)......
  • 洛谷题单指南-二叉堆与树状数组-P3368 【模板】树状数组 2
    原题链接:https://www.luogu.com.cn/problem/P3368题意解读:树状数组应用-区间修改,单点求值解题思路:设原数组为s[N],其差分数组为a[N]操作一:区间修改要对s[x]~s[y]每个数增加k,相当于对a[x]加k,对a[y+1]减k,O(n)的操作变成了O(1)的操作,利用树状数组tr[N]的add(x,k),add(y+......
  • 洛谷题单指南-二叉堆与树状数组-P3374 【模板】树状数组 1
    原题链接:https://www.luogu.com.cn/problem/P3374题意解读:树状数组模版:单点修改,区间求值。解题思路:树状数组-BinaryIndexTree可以动态维护一组数,可以O(logn)的修改一个数,也可以O(logn)的计算一段区间的和。思考一下朴素做法:如何修改一个数,计算区间和?如果是常规数组,修改操作......
  • 洛谷P1607
    [NOIP2009普及组]多项式输出-洛谷 [NOIP2009普及组]多项式输出题目描述一元n次多项式可用如下的表达式表示:f(x)=a_nx^n+a_{n-1}x^{n-1}+\cdots+a_1x+a_0,a_n\ne0其中,a_ix^i称为i次项,a_i称为i 次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定......
  • CSP/信奥赛C++语法基础刷题训练(11):洛谷P5743:猴子吃桃
    CSP/信奥赛C++语法基础刷题训练(11):洛谷P5743:猴子吃桃题目描述一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;接下来的每一天它都会吃剩余的桃子的一半外加一个。第n......