线段树 离散化

题目一:E. Infinite Inversions

 

这个题目没什么思维量,还比较简单,就是离散化要加上每一个值的后面一个值,然后每一个值放进去的不是1 ,而是这个值与下一个点的差值。

因为这个数代表了一堆数,然后每一次的找到了的逆序对都要乘以这个num。

 

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
#include <map>
#define inf 0x3f3f3f3f
#define inf64 0x3f3f3f3f3f3f3f3f
using namespace std;
const int maxn = 4e5 + 10;
typedef long long ll;
int num[maxn], a[maxn], b[maxn];
pair<ll, ll>ex[maxn];
struct node {int l, r;int num;
}tree[4 * maxn];void build(int id, int l, int r) {tree[id].l = l;tree[id].r = r;if (l == r) {tree[id].num = 0;return;}int mid = (l + r) >> 1;build(id << 1, l, mid);build(id << 1 | 1, mid + 1, r);
}int query(int id, int x, int y) {int l = tree[id].l;int r = tree[id].r;if (x <= l && y >= r) {return tree[id].num;}int ans = 0;int mid = (l + r) >> 1;if (x <= mid) ans += query(id << 1, x, y);if (y > mid) ans += query(id << 1 | 1, x, y);return ans;
}void push_up(int id) {tree[id].num =tree[id << 1].num+tree[id << 1 | 1].num;
}void update(int id, int x, int val) {int l = tree[id].l;int r = tree[id].r;if (l == r) {//printf("id=%d x=%d val=%d\n", id, x, val);tree[id].num = val;return;}int mid = (l + r) >> 1;if (x <= mid) update(id << 1, x, val);else update(id << 1 | 1, x, val);push_up(id);
}int main() {int n, tot = 0;scanf("%d", &n);for (int i = 1; i <= n; i++) {int u, v;scanf("%d%d", &u, &v);ex[i] = make_pair(u, v);a[tot++] = u, a[tot++] = v;a[tot++] = u + 1, a[tot++] = v + 1;}sort(a, a + tot);int len = unique(a, a + tot) - a;//printf("len=%d\n", len);num[len - 1] = 1;for (int i = 0; i < len - 1; i++) {num[i] = a[i + 1] - a[i];//printf("num[%d]=%d a[%d]=%d\n", i, num[i], i, a[i]);
    }memcpy(b, a, sizeof(a));for(int i=1;i<=n;i++){ex[i].first = lower_bound(a, a + len, ex[i].first) - a;ex[i].second = lower_bound(a, a + len, ex[i].second) - a;//printf("ex[%d] %lld %lld\n", i, ex[i].first, ex[i].second);
    }for (int i = 1; i <= n; i++) swap(a[ex[i].first], a[ex[i].second]), swap(num[ex[i].first], num[ex[i].second]);ll ans = 0;build(1, 1, len);for(int i=0;i<len;i++){int l = lower_bound(b, b + len, a[i]) - b + 1;//printf("l=%d\n", l);ans += query(1, l, len) * 1ll * num[i];update(1, l, num[i]);//printf("ans=%lld\n", ans);
    }printf("%lld\n", ans);return 0;
}
离散化+线段树

 

题目二:E. Physical Education Lessons

这个空间开的特别变态,空间要开的很大,而且这个空间给的也不是很多,没什么思维量,比较简单。

开始在第17发 re到我怀疑我写搓了,然后就是第一发mle。。。

 

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
#include <map>
#define inf 0x3f3f3f3f
#define inf64 0x3f3f3f3f3f3f3f3f
using namespace std;
const int maxn1 = 1e7 + 5e6 + 10;
const int maxn = 3e5 + 10;
typedef long long ll;
int a[maxn * 4], num[maxn1];
struct edge {int u, v, opt;edge(int u = 0, int v = 0, int opt = 0) :u(u), v(v), opt(opt) {}
}order[maxn * 2];
struct node {int lazy;int sum, num;
}tree[maxn1];void push_up(int id) {tree[id].sum = tree[id << 1].sum + tree[id << 1 | 1].sum;tree[id].num = tree[id << 1].num + tree[id << 1 | 1].num;
}void build(int id, int l, int r) {tree[id].lazy = -1;if (l == r) {tree[id].sum = num[l];tree[id].num = num[l];return;}int mid = (l + r) >> 1;build(id << 1, l, mid);build(id << 1 | 1, mid + 1, r);push_up(id);
}void push_down(int id) {if (tree[id].lazy != -1) {tree[id << 1].sum = tree[id << 1].num*tree[id].lazy;tree[id << 1 | 1].sum = tree[id << 1 | 1].num*tree[id].lazy;tree[id << 1].lazy = tree[id].lazy;tree[id << 1 | 1].lazy = tree[id].lazy;tree[id].lazy = -1;}
}void update(int id,int l,int r, int x, int y, int k) {push_down(id);if (x <= l && y >= r) {tree[id].lazy = k;tree[id].sum = tree[id].num*k;return;}int mid = (l + r) >> 1;if (x <= mid) update(id << 1, l, mid, x, y, k);if (y > mid) update(id << 1 | 1, mid + 1, r, x, y, k);push_up(id);
}int main() {int n, m, tot = 1;scanf("%d%d", &n, &m);a[0] = 1;for (int i = 1; i <= m; i++) {int u, v, k;scanf("%d%d%d", &u, &v, &k);order[i] = edge(u, v, k);a[tot++] = u, a[tot++] = u + 1;a[tot++] = v, a[tot++] = v + 1;}sort(a, a + tot);int len = unique(a, a + tot) - a;for (int i = 1; i <= m; i++) {order[i].u = lower_bound(a, a + len, order[i].u) - a + 1;order[i].v = lower_bound(a, a + len, order[i].v) - a + 1;}num[len] = n - a[len - 1] + 1;for (int i = 0; i < len - 1; i++) {num[i + 1] = a[i + 1] - a[i];//printf("num[%d]=%d\n", i + 1, num[i + 1]);
    }//for (int i = 1; i <= len; i++) printf("i=%d %d\n",i, num[i]);build(1, 1, len);//printf("len=%d\n", len);for (int i = 1; i <= m; i++) {int l = order[i].u;int r = order[i].v;int k = order[i].opt;//printf("l=%d r=%d\n", l, r);if (l > r) swap(l, r);update(1,1,len, l, r, k - 1);ll ans = tree[1].sum;printf("%lld\n", ans);}return 0;
}
离散化+线段树

 

转载于:https://www.cnblogs.com/EchoZQN/p/11203957.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时序模型——如何用Python进行时序模型预测的baseline预测(简单规则)

时序模型——如何用Python进行时序模型预测的baseline预测&#xff08;简单规则&#xff09; 在对时间序列问题进行建模预测之前&#xff0c;通常可以通过一些简单的规则对结果进行提前的预测&#xff0c;可以作为baseline&#xff0c;供之后的模型进行参考。很多数据分析的比…

简单关联规则算法例题-9个顾客的编号为(T1,T2,T3,T4,T5,T6,T7,T8,T9),每一个顾客购买的商品记录{{I1,I2,I5}...},并使用python实现简单关联规则

题目&#xff1a; 简单关联规则算法例题-9个顾客的编号为&#xff08;T1,T2,T3,T4,T5,T6,T7,T8,T9&#xff09;,每一个顾客购买的商品记录{{I1,I2,I5},{I2,I4},{I2,I3},{I1,I2,I4},{I1,I3},{I2,I3},{I1,I3},{I1,I2,I3,I5},{I1,I2,I3}}&#xff0c;求频繁项集&#xff1b;并用py…

ASP.NET AJAX (Atlas) 拖放(Drag Drop)功能6种实现方法总结

在Ajax程序中实现传统桌面程序中异常简单的拖放功能却并不是件容易的事情。然而Web上的拖放功能又如此的让人痴迷&#xff0c;所以几乎每个成熟的Ajax类库都提供了自己的一套实现拖放的封装&#xff0c;ASP.NET AJAX (Atlas) 自然也不例外。本文将总结并简要分析ASP.NET AJAX (…

python实现决策树-数据集如下图所示,根据我们对决策树的理解,设计一棵决策树,并输入{Age:36,Salary:H,STU:No,Credit:OK} 测试数据,是否与预期结果一致?

题目&#xff1a;数据集如下图所示&#xff0c;根据我们对决策树的理解&#xff0c;设计一棵决策树&#xff0c;并输入{Age:36,Salary:H,STU:No,Credit:OK} 测试数据&#xff0c;是否与预期结果一致&#xff1f;注意&#xff0c;不允许直接调用Sklearn提供的决策树方法 决策树算…

047 一维数据的格式化和处理

目录 一、概述二、数据组织的维度2.1 从一个数据到一组数据2.2 维度&#xff1a;一组数据的组织形式2.3 一维数据2.4 二维数据2.5 多维数据2.6 高维数据2.7 数据的操作周期三、一维数据的表示3.1 如果数据间有序&#xff1a;使用列表类型3.2 如果数据间无序&#xff1a;使用集合…

jupyter中中文显示不正常_jupyter画图中文显示乱码问题解决办法

问题&#xff1a;为什么Jumpy中运行图片无法正常显示中文字体&#xff1f; 在使用jumpy运行可视化代码时&#xff0c;发现图片无法正常显示中文符号&#xff0c;在尝试网上诸多方法后&#xff0c;发现只需加一行代码即可解决 解决方法&#xff1a; 可以查看一下代码中是否存…

如何合理的定义用户流失——流失多少天算流失

关于流失用户&#xff0c;我们首先想到的是选择怎样的时间跨度才能准确定义玩家为一个流失用户。通常在游戏中&#xff0c;会有对流失玩家召回活动&#xff0c;假如流失玩家的流失期限定义太短&#xff0c;比如3天未登录游戏&#xff0c;即算流失&#xff1b;这样虽然能够覆盖更…

如何使jupyter notebook自动补全代码和生成不同级别的标题

在我们使用jupyter notenook去编写程序时&#xff0c;在这个交互式的笔记本上使用python语言去进行数据分析&#xff0c;十分方便。但当分析的内容有点多时&#xff0c;我们能清楚的看清该步内容处于第几级目录下&#xff0c;使分析的逻辑清晰明了。因此接下来&#xff0c;我们…

K近邻法(KNN)原理小结

K近邻法(k-nearest neighbors,KNN)是一种很基本的机器学习方法了&#xff0c;在我们平常的生活中也会不自主的应用。比如&#xff0c;我们判断一个人的人品&#xff0c;只需要观察他来往最密切的几个人的人品好坏就可以得出了。这里就运用了KNN的思想。KNN方法既可以做分类&…

python 解决print数组/矩阵无法完整输出的问题

问题描述&#xff1a; 当数组/矩阵过大则只会显示其中一部分&#xff0c;中间则会自动用省略号代替&#xff0c;而我们想要去查看数组/矩阵的具体内容时&#xff0c;则需要将省略号代替的部分展示出来&#xff1a; 解决方法&#xff1a; 直接在import numpy 加上下面一句代码即…

SpringBoot学习笔记2

九&#xff1a;创建父工程 注意&#xff1a;打包方式选择为pom 将创建SpringBoot常用的依赖和插件放在父工程的pom.xml,如下&#xff1a; 1 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" …

Windows下更改默认的python环境

Windows下更改默认的python环境1.查找python所在的路径2.高级系统设置3.编辑path变量1.查找python所在的路径 打开电脑中的cmd&#xff0c;输入where python&#xff0c;得到电脑中所有python环境的路径 2.高级系统设置 此电脑——>属性——>高级系统设置——>环境…

理解Silverlight的路径填充规则

这个可以扩展到矢量图中路径的填充规则&#xff0c;因为所有矢量图都采用这个规则来填充封闭路径的内部&#xff0c;在这里只以Silverlight为例。 在网上找了很久关于填充规则的介绍&#xff0c;经过了几天的阅读和自己理解还有亲自尝试&#xff0c;现在终于能说出过所以然来了…

Jquery复习(七)之尺寸

jQuery 尺寸 方法 jQuery 提供多个处理尺寸的重要方法&#xff1a; width() height() innerWidth() innerHeight() outerWidth() outerHeight() jQuery 尺寸 jQuery width() 和 height() 方法 width() 方法设置或返回元素的宽度&#xff08;不包括内边距、边框或外边距&am…

更改默认安装位置到其他盘

1 同时按住Win R键&#xff0c;出现如下界面&#xff0c;在输入框中输入regedit&#xff0c;点击确定。 2 此时会进入到注册表编辑器界面&#xff0c;按如下路径选择&#xff1a;计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 将所有默认路径&#xf…

如何启用SQL Server 2008的FILESTREAM特性

如何启用SQL Server 2008的FILESTREAM特性 今天安装SQL Server 2008的时候没有注意&#xff0c;忘记了启用FILESTREAM特性&#xff0c;因为默认情况下FILESTREAM是禁用的。安装完成后&#xff0c;再导入一个.bak的备份数据库时提示FILESTREAM feature is disabled&#xff0c;到…

网络开发必备的HTTP协议知识

一、什么是HTTP协议 HTTP协议是一种应用层协议&#xff0c;HTTP是HyperText Transfer Protocol(超文本传输协议)的英文缩写。HTTP可以通过传输层的TCP协议在客户端和服务器之间传输数据。HTTP协议主要用于Web浏览器和Web服务器之间的数据交换。我们在使用IE或Firefox浏览…

----uni-app之解决HBuilderX安装less成功运行时提示未安装----

转载于:https://www.cnblogs.com/zjy850984598/p/11238777.html

win7系统cocos2dx 3.4 绑定自定义类到Lua

Cocos2d-x 3.0开始使用bindings-generator来生成c类的lua绑定。bindings-generator基于tolua&#xff0c;通过配置tools/tolua中的ini文件以及运行genbindings.py就可以自动生成c类的绑定&#xff0c;具体的步骤在cocos2d-x-3.4\tools\tolua\README.mdown文件中&#xff0c;文档…

jQuery无任何标示获取td在表格中的行数和列数

当td没有任何标示时&#xff0c;在jQuery中实现获取其在表格中的行和列&#xff1a;<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w…