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 ...
随机推荐
- 雷林鹏分享:C# 正则表达式
C# 正则表达式 正则表达式 是一种匹配输入文本的模式..Net 框架提供了允许这种匹配的正则表达式引擎.模式由一个或多个字符.运算符和结构组成. 定义正则表达式 下面列出了用于定义正则表达式的各种类 ...
- 雷林鹏分享:Ruby 类和对象
Ruby 类和对象 Ruby 是一种完美的面向对象编程语言.面向对象编程语言的特性包括: 数据封装 数据抽象 多态性 继承 这些特性将在 面向对象的 Ruby 中进行讨论. 一个面向对象的程序,涉及到 ...
- Assert.IsNotNull 方法(判断对象不为NULL)
Assert.IsNotNull 方法 Visual Studio 2012 其他版本 Visual Studio 2010 Visual Studio 2008 Visual Studio 20 ...
- Android之设计模式
设计模式的概念 1.基本定义:设计模式(Design pattern)是一套被反复使用的代码设计经验的总结.使用设计模式的目的是为了可重用代码.让代码更容易被他人理解.设计模式是是软件工程的基石脉络, ...
- P4173 残缺的字符串 fft
题意:给你两个字符串,问你第一个在第二个中出现过多少次,并输出位置,匹配时是模糊匹配*可和任意一个字符匹配 题解:fft加速字符串匹配; 假设上面的串是s,s长度为m,下面的串是p,p长度为n,先考虑 ...
- Multi-target tracking by Lagrangian relaxation to min-cost network flow
Multi-target tracking by Lagrangian relaxation to min-cost network flow high-order constraints min-c ...
- UVA-1629 Cake slicing (DP、记忆化搜索)
题目大意:一块n*m的矩形蛋糕,有k个草莓,现在要将蛋糕切开使每块蛋糕上都恰有一个(这意味着不能切出不含草莓的蛋糕块)草莓,要求只能水平切或竖直切,求最短的刀切长度. 题目分析:定义状态dp(xa,y ...
- OAF 交互式列车 上一步 下一步的简单使用
在实际的需求中,我们往往会遇到在下一步的时候验证某些参数,而上一步不需要验证. 这个是非常粗暴的解决方式 if( "goto".equals(pageContext.getPara ...
- 普通Region中动态设置poplist的值跟着当前区域的某些值动态变化
//控件设置 ID Catergory1 Item Style messageChoice Picklist View Definition Cux.oracle.apps.po.poplist.se ...
- 二、为什么要用MapReduce
一.为什么要用MapReduce? 首先MapReduce被广泛应用于日志分析.海量数据的排序.在海量数据中查找特定模式等 场景.而且它非常简单,易于实现且扩展性强.可以通过它编写同事在多台主机上运行 ...