首页 > 其他分享 >每日一题-CF1996G Penacony

每日一题-CF1996G Penacony

时间:2024-07-27 14:18:05浏览次数:7  
标签:rt mn CF1996G int Penacony tr 一题 lz id

异常明显的思路,考场上却不会,连确定一条边不选都没想到

#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define fi first
#define se second
#define mp make_pair
#define ls (rt<<1)
#define rs (rt<<1|1)
#define mid (l+r>>1)
int t,n,m,res;
pii a[200005];
struct tree{
	int mn,s,lz;
}tr[800005];
void push_up(int rt){
	tr[rt].s=0;
	tr[rt].mn=min(tr[ls].mn,tr[rs].mn);
	if(tr[rt].mn==tr[ls].mn)tr[rt].s+=tr[ls].s;
	if(tr[rt].mn==tr[rs].mn)tr[rt].s+=tr[rs].s;
}
void build(int rt,int l,int r){
	tr[rt].lz=0;
	if(l==r){
		tr[rt]=tree{0,1,0};
		return ;
	}
	build(ls,l,mid);build(rs,mid+1,r);
	push_up(rt);
}
void push_down(int rt){
	tr[ls].mn+=tr[rt].lz;
	tr[ls].lz+=tr[rt].lz;
	tr[rs].mn+=tr[rt].lz;
	tr[rs].lz+=tr[rt].lz;
	tr[rt].lz=0; 
}
void update(int rt,int l,int r,int ql,int qr,int k){
//	if(rt==1)printf("%d %d %d\n",ql,qr,k);
	if(ql<=l && qr>=r){
		tr[rt].mn+=k;
		tr[rt].lz+=k;
		return ;
	}else if(ql>r || qr<l)return ;
	push_down(rt);
	update(ls,l,mid,ql,qr,k);
	update(rs,mid+1,r,ql,qr,k);
	push_up(rt);
}
int query(){
	return n-tr[1].s;
}
struct node{
	int x,id;
}b[400005];
bool cmp(node x,node y){
	return x.x<y.x;
}
int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d%d",&n,&m);
		for(int i=1;i<=m;i++)scanf("%d%d",&a[i].fi,&a[i].se),b[i]=node{a[i].fi,i},b[i+m]=node{a[i].se,-i};
		build(1,1,n);
		for(int i=1;i<=m;i++){
			if(a[i].fi>=2)update(1,1,n,a[i].fi,a[i].se-1,1);
			else update(1,1,n,a[i].se,n,1);
		}
		sort(b+1,b+1+m+m,cmp);
		int la=0;
		res=query();
		while(b[la+1].x==1 && la+1<=m+m)la++;
		for(int i=2;i<=n;i++){
			while(b[la+1].x==i && la+1<=m+m){
				la++;
				if(b[la].id>0){
					int id=b[la].id;
					update(1,1,n,1,a[id].fi-1,1);
					update(1,1,n,a[id].fi,a[id].se-1,-1);
					update(1,1,n,a[id].se,n,1);
				}else{
					int id=-b[la].id;
					update(1,1,n,1,a[id].fi-1,-1);
					update(1,1,n,a[id].fi,a[id].se-1,1);
					update(1,1,n,a[id].se,n,-1);
				}
			}
//			if(i==3)printf("%d!!!!!!!!\n",query());
			res=min(res,query());
		}
		printf("%d\n",res);
	}
	return 0;
} 

标签:rt,mn,CF1996G,int,Penacony,tr,一题,lz,id
From: https://www.cnblogs.com/kentsbk/p/18326895

相关文章

  • 每日一题:Leetcode-32 最长有效括号
    力扣题目解题思路java代码力扣题目:给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例1:输入:s="(()"输出:2解释:最长有效括号子串是"()"示例2:输入:s=")()())"输出:4解释:最长有效括号子串是"()()"示例3:输入:s=""......
  • 每日一题-P1344
    本来求边数又建了个图跑流,然后看题解发现直接流量置为A*w+1(A为足够大的数)感觉很强#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintA=1e5;constllinf=1e18;intn,m,s,t;structedge{ intv;llw;intnx;}e[10005];intcnt,hd[205],cur[......
  • 每日一题-P1263
    一眼匈牙利,没有紫啊#include<bits/stdc++.h>usingnamespacestd;#definepbpush_backintn,m,res,a[205][205],p[40005];intid1[205][205],fr1[40005],cnt1,id2[205][205],fr2[40005],cnt2;boolvis[40005];structedge{ intv,nx;}e[40005];intcnt,hd[40005];vo......
  • 每日一题:Leetcode-322 零钱兑换
    力扣题目解题思路java代码力扣题目:给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。示例......
  • 每日一题:Leetocde-70 爬楼梯
    力扣题目解题思路java代码力扣题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例1:输入:n=2输出:2解释:有两种方法可以爬到楼顶。1.1阶+1阶2.2阶示例2:输入:n=3输出:3解释:有......
  • 每日一题-P1261
    其实想到方法了,但是以为复杂度炸了,好蠢#include<bits/stdc++.h>usingnamespacestd;#definepbpush_backintn,m,rk[30005],f[30005],g[30005],dis[30005],ans;boolvis[30005];vector<int>s;structedge{ intv,w,nx;}e[300005];intcnt,hd[30005];voidadd(intu,......
  • 每日一题-P1251
    网络流24题~#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintinf=1e9;constlllnf=1e18;intN,p,m,f,n,s,r[2005],st,ed;structedge{ intv,nx;llw;intc;}e[40005];intcnt,hd[4105];voidadd(intu,intv,llw,intc){ e[++cnt......
  • 7月22号python 每日一题
    7月22号python每日一题LCR121.寻找目标值-二维数组难度:中等m*n的二维数组plants记录了园林景观的植物排布情况,具有以下特性:每行中,每棵植物的右侧相邻植物不矮于该植物;每列中,每棵植物的下侧相邻植物不矮于该植物。请判断plants中是否存在目标高度值target。示......
  • 每日一题之快乐数问题
    题目:题目链接:快乐数题解:方法一:哈希表首先就是何种情况下不是快乐数,那就是处理过的结果多次重复出现的情况,那这里就可以通过哈希表在每次循环中存储处理后的结果,如果处理后的结果在哈希表中查找的到说明结果重复说明该数不是快乐数,退出循环即可,否则一直循环到处理结果为1......
  • 每日一题-P1050
    挺唐的经典一位一位来#include<bits/stdc++.h>usingnamespacestd;constintL=100;char_[L+5];intk;structnode{ inta[L+5],len; node(int_k=0){ len=0;memset(a,0,sizeof(a)); if(_k)a[++len]=_k; } voidread(){ scanf("%s",_+1);len=strlen(......