首页 > 其他分享 >[JOI 2020 Final] 火事 题解

[JOI 2020 Final] 火事 题解

时间:2024-07-31 21:31:38浏览次数:16  
标签:int 题解 tp st ++ 2020 JOI mx

给一篇题解。(下面这张图是从 luogu 上粘贴的,因为不太会画图)

其中纵坐标为 \(t\),横坐标为 \(a_i\)。

发现同颜色块只有平行四边形和直角梯形(等腰直角三角形)两种情况。

可以将直角梯形削去左下角,分成两部分考虑。

等直可以直接暴力插入区间,总个数 \(O(n)\)。

平行四边形可以看作上三角+中平四/矩形+下三角,矩形不变,平四直接将赋值区间平移即可。

感觉最多有 \(O(n\log n)\) 个区间,加上树状数组应该是 \(O(n\log^2n)\),但是由于其中 \(dep\) 优化+根本跑不满,所以跑得飞快。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int n,dep,a[N],b[N];
int l[N],r[N],ga[N];
int m,tp,st[N],gb[N];
int mx,ans[N],c[N*2][3];
void add(int x,int y,int k){
	for(;x<=n*2;x+=x&-x)
		c[x][y]+=k;
}int sum(int x,int y){
	int re=0;
	for(;x;x-=x&-x)
		re+=c[x][y];
	return re;
}struct node{
	int l,r,id;
};vector<node>qu[N];
struct upd{
	int id,ad;
};vector<upd>w1[N],w2[N];
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>a[i],mx=max(mx,a[i]);
	a[n+1]=mx+1;st[++tp]=n+1;
	for(int i=n;i;i--){
		while(a[i]>a[st[tp]]) tp--;
		r[i]=st[tp];
		if(a[i]==a[st[tp]]) st[tp]=i;
		else st[++tp]=i;
	}tp=0;
	for(int i=1;i<=n;i++){
		while(tp&&a[i]>=a[st[tp]]) tp--;
		if(!st) st[++tp]=i;
		else l[i]=st[tp],st[++tp]=i;
	}for(int i=1;i<=n;i++)
		gb[i]=r[i]-i,dep=max(dep,gb[i]);
	for(int i=1;i<=n;i++){
		if(!l[i]){
			ga[i]=dep-gb[i]+1;
			for(int j=ga[i]+1;j<=dep;j++)
				w1[j].push_back({j-ga[i]-1+i,a[i]});
		}else ga[i]=i-l[i];
	}for(int i=1;i<=m;i++){
		int t,l,r;cin>>t>>l>>r;
		qu[t].push_back({l,r,i});
	}for(int i=1;i<=n;i++)
		b[i]=max(a[i],b[i-1]),add(i,2,b[i]);
	for(int i=dep;i<=n;i++)
		for(auto y:qu[i])
			ans[y.id]=sum(y.r,2)-sum(y.l-1,2);
	for(int i=1;i<=n;i++){
		if(ga[i]>=gb[i])
			for(int j=1;j<=gb[i];j++){
				w1[j].push_back({i+j-1,a[i]});
				w1[ga[i]+j].push_back({i+j-1,-a[i]});
			}
		else for(int j=1;j<=ga[i];j++){
			w2[j].push_back({i-j+1,a[i]});
			w2[gb[i]+j].push_back({i-j+1,-a[i]});
		}
	}for(int i=1;i<=dep;i++){
		for(auto y:w1[i]) add(y.id,0,y.ad);
		for(auto y:w2[i]) add(y.id+n,1,y.ad);
		for(auto y:qu[i-1])
			ans[y.id]=sum(y.r,0)-sum(y.l-1,0)+sum(y.r-i+1+n,1)-sum(y.l-i+n,1);
	}for(int i=1;i<=m;i++) cout<<ans[i]<<"\n";
	return 0;
}

标签:int,题解,tp,st,++,2020,JOI,mx
From: https://www.cnblogs.com/chang-an-22-lyh/p/18335525/joi2020final_huoshi_tj

相关文章

  • [CF455D] Serega and Fun 题解
    不知道大家做没做过数列分块基础9题?插入删除操作可以用链表,线段树等数据结构都不好维护,考虑分块。对于修改操作,暴力重构受影响块的链表,发现除首尾块外,其他块都可以看作是区间左移一位,所以加头删尾即可。每个块开一个数组(绝对不能是\((un\_)map\),不然你会和我一样死的很诡异),表示......
  • HDU2024 R2 T9 题解
    考虑维护一下每个点的速度。把区间加拆成后缀加和后缀减,然后考虑后缀加。减就同理。考虑在一段后缀的目标速度增加之后,哪些时刻的加速度会变化。这里加速度必然只会变大\(1\),因此在这个时刻之后的速度都会增加\(1\),又由于目标速度也增加了\(1\),所以这个位置之后的加速度都不再......
  • CF455D Serega and Fun 题解
    Beforeit来当一回教练的题解翻译家,平衡树这种高级算法自然是不会的,所以详细讲一下STL。成为蒟蒻(也就是自己)的福音。Solution我们观察到题目要求“把第\(r\)个数插入在第\(l\)个数之前,其他数顺序不变“,使用\(deque\)的\(push\)_\(front\)和\(push\)_$back$操作可......
  • 暗区突围pc端下载失败/卡正在初始化/连接伺服务器失败/问题解决方法
    暗区突围pc端下载失败/卡正在初始化/连接伺服务器失败/问题解决方法暗区突围pc端下载失败/卡正在初始化/连接伺服务器失败/问题解决方法暗区突围也可以在电脑上游玩拉,暗区突围PC端上线在即,本次上线就是全球抢先测试了,很多小伙伴在游戏下载过程中遇到了很多问题,比如:下载失......
  • QOJ6504 Flower‘s Land 2 题解
    QOJ6504Flower'sLand2题解题目链接:QOJ6504Flower'sLand2题意:给定一个只包含\(0,1,2\)的序列,\(T\)次询问,询问有两种:区间所有数加\(1\)然后模\(3\)求一段区间能否通过每次删掉相邻两个相同的数删完(如\(1,0,0,2,2,1\)就满足条件)题解:考虑用什么方法来维护区间......
  • CF1995C Squaring 题解
    思路详解:请注意,本题解用到了非整数计算,也就是说性能可能不如整数运算,但是易于实现,追求最优解的大佬不建议观看本题解。这个题看似简单,但是由于涉及到了平方操作,不用高精度根本存不下,然后如果你要用高精度的话又会T......
  • 关于题解
    这里说一下为什么要在博客园写东西,其实有几个主要原因:首先是我一个朋友写题解的时候,因为多了一个空格被打回。然后我这个朋友就开始在这里写东西了。然后这个朋友找到了一个拿过金牌的学长,他同样之前审过题解,总之他认为只要不是题解写的完全不能看,或者在某些地方有一些事实性错......
  • 平行四边形 题解
    题目id:20306题目描述鱼大大凭借着优秀的语文成绩当上了数学课代表?!鱼大大心想着数学和我语文好也不搭边呀,不过他的数学老师疯狂给鱼大大画饼:只要你当了数学课代表,有很多很多权利的啦......最后数学老师告诉鱼大大,人只要一行行,行行行,这句话在学科上也是一样的,语文学的好,数学也一......
  • 数字检测 题解
    题目id:20317题目描述作为一个学渣的鱼大大在学习了进制数之后,经常会写错进制数,导致他在做题的时候经常出现,写到了最后发现数字是错的情况,非常浪费时间。所以他迫切地想要一位大聪明随时随刻能帮他检测一下他写的\(n\)进制数到底是不是对的。现在鱼大大给出了一个\(n\)进制的数\(......
  • [GYCTF2020]FlaskApp (pin码,jinja2绕过注入)
    题目就是flask下面是判断模版注入的方法a{*comment*}b和{{7*'7'}}base64编码后解码都报错no,无法判断模版引擎直接用下jinja2的试一试,把编码后的密文拿去解码,payload:{{"".__class__mro(2)__subclasses__()}}报错是jinja2后面就整不会了,看别人的wp整理一下:由于不......