首页 > 其他分享 >[Ynoi Easy Round 2021] TEST_152(颜色段数均摊+扫描线)

[Ynoi Easy Round 2021] TEST_152(颜色段数均摊+扫描线)

时间:2023-08-02 19:34:18浏览次数:45  
标签:Info 152 int LL 段数 扫描线 col define

题目传送门

solution

简单题,考虑正着做扫描线,维护最后一次覆盖每个位置的修改时间,这个可以用 \(set\) 维护颜色段数均摊。

那么显然对于一个以当前位置为右端点的询问,其答案就是所有最后修改时间大于等于左端点的位置的数的和。

开一个树状数组维护最后一次修改时间是 \(i\) 的位置上的数的和即可。

复杂度 \(O(n\log n)\)

#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+7;
struct Info 
{
	int l,r,c; 
};
bool operator <(Info A,Info B)
{
	return A.l<B.l;
}
int n,m,q;
set<Info> col;
typedef long long LL;
LL C[N];
void upd(int x,LL v)
{
	for(int i=x;i;i-=i&-i)C[i]+=v; 
}
LL ask(int x)
{
	LL res=0;
	for(int i=x;i<=m;i+=i&-i)res+=C[i];
	return res;
}
#define pot set<Info>::iterator 
pot Split(int x)
{
	if(x>n)return col.end();
	pot it=(--col.upper_bound((Info){x,0,0}));
	if((*it).l==x)return it;
	int l=(*it).l,r=(*it).r,c=(*it).c;
	col.erase(it);
	col.insert((Info){l,x-1,c});
	return col.insert((Info){x,r,c}).first;
} 
int lp[N],rp[N],w[N];
void Cov(int len,int t,int op)
{
	upd(t,1ll*len*w[t]*op);
}
void Assign(int l,int r,int c)
{
	pot itr=Split(r+1),itl=Split(l);
	for(auto it=itl;it!=itr;it++) Cov((*it).r-(*it).l+1,(*it).c,-1);
	Cov(r-l+1,c,1);
	col.erase(itl,itr);
	col.insert((Info){l,r,c});
}
#define PII pair<int,int>
#define mk(x,y) make_pair(x,y)
#define X(x) x.first
#define Y(x) x.second
vector<PII> G[N];
LL Ans[N];
int main()
{
	cin>>m>>n>>q;
	for(int i=1;i<=m;i++)scanf("%d %d %d",&lp[i],&rp[i],&w[i]);
	col.insert((Info){1,n,0});
	for(int i=1;i<=q;i++)
	{
		int l,r;
		scanf("%d %d",&l,&r);
		G[r].push_back(mk(l,i));
	}
	for(int i=1;i<=m;i++)
	{
		Assign(lp[i],rp[i],i);
		for(auto U:G[i])Ans[U.second]=ask(U.first);
	}
	for(int i=1;i<=q;i++)printf("%lld\n",Ans[i]);
	return 0;
}

标签:Info,152,int,LL,段数,扫描线,col,define
From: https://www.cnblogs.com/jesoyizexry/p/17601570.html

相关文章

  • Educational Codeforces Round 152 (Rated for Div. 2)
    Preface经典秒完SB题然后开始坐牢1h,写了个E的假算法T在24个点就不管了打lol去了妈的怎么稍微难点的题就是想不到呢A.MorningSandwich签到#include<cstdio>#include<iostream>#include<utility>#include<vector>#include<cstring>#include<cmath>#include<cstdlib>......
  • Educational Codeforces Round 152 (Rated for Div. 2) D. Array Painting
    初始所有点都是蓝色的,给定一个数组,每个元素为0,1,2等值,两种操作,选定一个点花1元变红,或者选定一个为1或者2的红色点,减去一个价值,让周围的点变红,最后所有点都要变红思路:贪心,对于一个数组来说我们找寻连续的不等于0的一段,判断每一段最多所能变红的存在两种情况010,这种情况花1可以最......
  • Educational Codeforces Round 152 (Rated for Div. 2) C. Binary String Copying
    题目大意为给定一个01字符串,给定m个区间,对于每个区间进行一次局部排序,求能得到的字符串种类数解法:因为字符串只包含0,1两个字符,我们观察可以得到,对于不同的区间来说如果排序后一样则说明肯定是某些位置在排序过程中无贡献,因此我们只需找出有贡献的位置即可对于一个区间[l,r],来说......
  • 【学习笔记】扫描线
    扫描线是用来求解图形面积并的一个算法。问题引入给定\(n\)个长方形,求它们的面积并。下面以两个长方形为例:对于这个问题,可以有容斥等做法,但是还有个更简单的方法——扫描线。扫描线扫描线,顾名思义,就是,拿一条“线”取扫(这里是从下往上扫,其实其它的扫的方式也是可以的):如图......
  • Educational Codeforces Round 152 (Rated for Div. 2)
    传送阵T1MorningSandwich题目大意\(t\)个测试,每个测试给三个正整数\(b,c,h\),分别表示面包和两种馅料的个数,每两个面包之间必须放一个馅料,问最多能摆几层?思路我们发现\(c,h\)所表示的两种馅料其实相差不大,所以我们可以分两种情况\(a>c+h\)因为开头总是面包,所以要+......
  • Educational Codeforces Round 152 (Rated for Div. 2) 题解
    \(6\)题做出来\(3\)题,这一次的D题没能复刻上一次Round888Div.3最后几分钟AC的奇迹A.MorningSandwich大水题,5min时间4min都在翻译题面直接拿\(b\)和\(c+h\)进行比较分类讨论即可单次操作时间复杂度\(O(1)\)B.Monsters首先有一个特别显然、复杂度特别高的......
  • Educational Codeforces Round 152 (Rated for Div. 2)记录
    A.MorningSandwich#include<cstdio>#include<algorithm>#include<cmath>#include<vector>#include<string.h>#include<set>#include<string>#include<map>#include<iostream>#include<queue......
  • Educational Codeforces Round 152 A~D
    A#include<bits/stdc++.h>#defineendl'\n'#defineiosios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)usingnamespacestd;typedefpair<int,int>PII;constintN=2e5+10;constintMOD=1e9+7;intT;vo......
  • 【学习笔记】扫描线
    【别急,我也不会,没写完】目录定义:例题(解释):定义:如图:(图片来源:oiwiki)像这样的一条线在图上扫描时,便是扫描线。(呃呃和没说没有任何区别呢)因此可见扫面线往往是求矩形面积并集或周长并集的好工具,当然,也可以运用在二维图中。当然它不止可以从上往下扫,还可以从左往右扫:(当然自己......
  • 《安富莱嵌入式周报》第318期:无线电扫描仪,高精度功耗分析仪,单片机JavaScript引擎,平头
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 【实战技能视频】基于硬件垂直消隐的多缓冲技术在LVGL,emWin,GUIX和TouchGFX应用https://www.armbbs.cn/forum.php?mod=viewthread&tid=120114视频版:https://www.bilibili.......