首页 > 其他分享 >洛谷P5057简单题

洛谷P5057简单题

时间:2024-11-18 22:41:50浏览次数:1  
标签:std 洛谷 int P5057 简单 const op define

P5057 [CQOI2006] 简单题

这是题面

思路

每次操作,直接区间加\(1\),最后求结果的时候对\(2\)取余就好了

这个题就是区间修改 + 单点查询

可以用树状数组或者线段数维护

代码

#include <bits/stdc++.h>
#define endl '\n'
#define int long long
#define lowbit(x) x & -x
const int maxn = 5e5 + 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 n = 0, m = 0;
int fenwick1[maxn], fenwick2[maxn];

void modify(int pos, int x)
{
    int v = pos * x;
    while(pos <= n)
    {
        fenwick1[pos] += x;
        fenwick2[pos] += v;
        pos += lowbit(pos);
    }
}   

int query(int pos, int t[])
{
    int res = 0;
    while(pos)
    {
        res += t[pos];
        pos -= lowbit(pos);
    }
    return res;
}

void range_modify(int l, int r, int v)
{
    modify(l, v);
    modify(r + 1, -v);
}

int range_query(int l, int r)
{
    int pre = (r + 1) * query(r, fenwick1) - l * query(l - 1, fenwick1);
    int pos = query(r, fenwick2) - query(l - 1, fenwick2);
    return pre - pos;
}

int single_query(int pos)
{
    return query(pos, fenwick1);
}

void solve()
{
    std::cin >> n >> m;
    int op = 0, L = 0, R = 0;
    for (int i = 1; i <= m; i++)
    {
        std::cin >> op;
        if (op == 1)
        {
            std::cin >> L >> R;
            range_modify(L, R, 1);
        }
        else
        {
            std::cin >> L;
            int ans = single_query(L);
            std::cout << ans % 2 << endl;
        }
    }
}

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;
}

标签:std,洛谷,int,P5057,简单,const,op,define
From: https://www.cnblogs.com/SteinsGateSg/p/18553900

相关文章

  • 简单爬虫的实现
    简单爬虫的实现爬虫的简要介绍爬虫的简单实现运用python的库尝试向网页发送请求处理得到的数据爬虫的简要介绍爬虫就是在网络上通过伪装为用户从而从网站上下载数据的程序或者行为。这样的行为就好比你去别人家的时候带走了几个橘子袖中怀橘啦,合理的爬取是可以的(毕......
  • 【微信批量群发】想要一次性给所有好友发送消息?这里有最简单的方法!
    点击关注免费试用【微信批量群发】想要一次性给所有好友发送消息?这里有最简单的方法!有没有遇到过这种情况?每次发个重要通知,想一口气通知所有微信好友,却得一个一个手动发,累得想哭!有时候还可能漏掉某个好友,简直要崩溃。是不是很烦恼?其实,批量发送微信消息超级简单,只需要......
  • 使用 PyTorch 从头构建最小的 LLM 该项目构建了一个简单的字符级模型
    简介我开始尝试各种受Pokémon启发的猫名变体,试图赋予它独特、略带神秘感的氛围。在尝试了“Flarefluff”和“Nimblepawchu”等名字后,我突然想到:为什么不完全使用人工智能,让字符级语言模型来处理这个问题呢?这似乎是一个完美的小项目,还有什么比创建自定义Pokémon名......
  • Action、Func、Predicate简单介绍
    1、Func、Action和Predicate是三种预定义的委托2、Action委托表示一不返回值的方法,最多16个输入参数,语法结构:Action<TParameter>带0个参数Actionaction0=()=>Console.WriteLine("acion0");带1个参数Action<string>action1=(msg)=>Console.WriteLine(msg);带2个......
  • 洛谷题单指南-二叉堆与树状数组-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)的计算一段区间的和。思考一下朴素做法:如何修改一个数,计算区间和?如果是常规数组,修改操作......