test20180919 区间最大值
题意


分析
我们将所有修改操作的左右端点都拿出来混合着排序。
然后扫描线一样扫描每个端点,维护一个堆储存当前最大值,然后就可以把这些修改操作分成O(m) 个不相交的区间,各自贡献独立。
复杂度为\(O(m \log m)\)。
浅谈扫描线
把每个区间的l,r+1的左闭右开区间端点混合排序后,其实在扫描左闭右开的区间过程中主要是以下4种情况:
- 前一个是l1,这一个是l2,那么其实要加的是[l1,l2-1]这个区间,而l2-1-l1+1=l2-l1
- 前一个是l1,这一个是r2+1,那么要加的是[l1,r2]这个区间,而r2-l1+1=r2+1-l1
- 前一个是r1+1,这一个是l2,那么要加的是[r1+1,l2-1]这个区间,而l2-1-r1-1+1=l2-r1-1
- 前一个是r1+1,这一个是r2+1,那么要加的是[r1+1,r2]这个区间,而r2+1-r1-1=r2-r1-1+1
所以可以直接对区间端点执行减操作,统计答案。
左闭右开区间真好用。
代码
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<complex>
#pragma GCC optimize ("O0")
using namespace std;
template<class T> inline T read(T&x)
{
T data=0;
int w=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(isdigit(ch))
data=10*data+ch-'0',ch=getchar();
return x=data*w;
}
typedef long long ll;
typedef pair<ll,ll> pii;
const int INF=0x7fffffff;
const int MAXN=1e5+7,mod=998244353;
ll maxv[MAXN];
pii A[MAXN<<1];
int sz;
multiset<ll>S;
ll ans;
int pow2(ll x)
{
x%=mod;
return (ll)x*x%mod;
}
void addedge(ll x,ll y)
{
if(S.empty())
return;
(ans += (ll)( y-x ) % mod * pow2( *S.rbegin() ) % mod ) %= mod;
}
int main()
{
freopen("segment.in","r",stdin);
freopen("segment.out","w",stdout);
ll n;
int m;
read(n);read(m);
for(int i=1;i<=m;++i)
{
ll l,r;
read(l);read(r);read(maxv[i]);
A[++sz]=pii(l,i);
A[++sz]=pii(r+1,-i);
}
sort(A+1,A+sz+1);
for(int i=1;i<=sz;++i)
{
if(i > 1 && A[i-1].first < A[i].first)
addedge(A[i-1].first,A[i].first);
if(A[i].second > 0)
S.insert(maxv[A[i].second]);
else
S.erase(maxv[-A[i].second]);
}
printf("%lld",ans);
// fclose(stdin);
// fclose(stdout);
return 0;
}
test20180919 区间最大值的更多相关文章
- POJ2482 Stars in Your Window 和 test20180919 区间最大值
Stars in Your Window Language:Default Stars in Your Window Time Limit: 1000MS Memory Limit: 65536K T ...
- POJ3264 Balanced Lineup 线段树区间最大值 最小值
Q个数 问区间最大值-区间最小值 // #pragma comment(linker, "/STACK:1024000000,1024000000") #include <i ...
- hdoj 2795 Billboard【线段树区间最大值】
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdoj1754 I Hate It【线段树区间最大值维护+单点更新】
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 2795 Billboard 线段树,区间最大值,单点更新
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDOJ(HDU).1754 I Hate It (ST 单点替换 区间最大值)
HDOJ(HDU).1754 I Hate It (ST 单点替换 区间最大值) 点我挑战题目 题意分析 从题目中可以看出是大数据的输入,和大量询问.基本操作有: 1.Q(i,j)代表求区间max(a ...
- 2018中国大学生程序设计竞赛 - 网络选拔赛 1010 YJJ's Salesman 【离散化+树状数组维护区间最大值】
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6447 YJJ's Salesman Time Limit: 4000/2000 MS (Java/O ...
- HDU - 1754 I Hate It (线段树单点修改,求区间最大值)
很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有 ...
- Codeforces Round #321 (Div. 2)-B. Kefa and Company,区间最大值!
->链接在此<- B. Kefa and Company time limit per test 2 seconds memory limit per test 256 megabytes ...
随机推荐
- ASCII 对照表
ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字母的一套电脑编码系统.它主要用于显示现代英 ...
- Maven部署web应用到远程服务器
Maven部署web应用到远程服务器 找到了一个很详细的地址:http://www.mkyong.com/maven/how-to-deploy-maven-based-war-file-to-tom ...
- [poj 3090]Visible Lattice Point[欧拉函数]
找出N*N范围内可见格点的个数. 只考虑下半三角形区域,可以从可见格点的生成过程发现如下规律: 若横纵坐标c,r均从0开始标号,则 (c,r)为可见格点 <=>r与c互质 证明: 若r与c ...
- dp练习(2)——老鼠的旅行
1267 老鼠的旅行(来源:codevs) #include "bits/stdc++.h" using namespace std; ][]; ][]; int main() { ...
- length,lengthb,substr,substrb,instr小用
--字符串的字符长度 select length('wm.dfw.士农工商.sda.人马ss.dfw.4.sdf.332.sf.qq.sd') from dual; --字符串的字节长度 select ...
- 浏览器请求中文乱码(ISO-8859-1 to UTF-8)
String utfString=new String(param.getBytes("iso-8859-1"),"utf-8");
- Python学习之路day3-集合
一.概述 集合(set)是一种无序且不重复的序列. 无序不重复的特点决定它存在以下的应用场景: 去重处理 关系测试 差集.并集.交集等,下文详述. 二.创建集合 创建集合的方法与创建字典类似,但没有键 ...
- popen strtok 函数的使用
FILE * popen ( const char * command , const char * type ); int pclose ( FILE * stream ); type 参数只能 ...
- Html.RenderPartial("")与Html.Partial("")区别
这个HtmlHelper的扩展方法Partial,和HtmlHelper自带的 RenderPartial功能比较接近, 两者都可以输出一个Partial视图:其区别如下: <一>. Pa ...
- webpack-dev-server将文件产出到指定目录
默认情况下webpack-dev-server是将文件产出到内存中,写了一个插件 将文件产出到指定目录, 比较简易啊 哈哈哈 使用代码如下 const WebpackDevServerOutput = ...