题意:给你一个01串,有以下操作. 选择一个区间[l,r],翻转该区间的01串(0变1,1变0) 输出一个区间[l,r] 1 的数量. 思路:典型的区间操作,考虑线段树解决.维护一个区间1的数目,记为tree[idx],如果翻转该区间,实际上就是把这个区间1的数目改为 (r - l +1) - tree[idx].其中 (r - l +1)代表区间长度 ,它减完tree[idx](当前1的数量. 就是目前0的数量.然后是把0翻转为1,1翻转为0.所以(r - l +1 ) - tree[idx] 就代表了翻转区间后1的数目. 剩下就是经典线段树维护了.
/*
*/
#include
using namespace std;
typedef long long ll;
const int maxn = 2e5+4;
const int INF = 1e9+7;
#define L (idx
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?