首页 > 其他分享 >AtCoder Beginner Contest 365

AtCoder Beginner Contest 365

时间:2024-08-04 16:41:04浏览次数:13  
标签:node AtCoder Beginner res 度数 else 然后 365

F - Takahashi on Grid

用线段树上的节点维护一下 \((l,r,c)\),如果 \(c\) 为 \(-1\):\(l,r\) 表示这一段区间内 \([l,r]\) 的交。
如果 \(c\ne -1\),\(l,r\) 表示这一段第一次上下界相等的时候的位置为 \(l\),合并后走出来的位置为 \(r\),然后转折的步数为 \(c\)。然后这玩意可以合并,每一次查询相当于首尾插入两个元素 \((sy,sy,0)\),\((ty,ty,0)\),然后并一下就行了。然后这一题似乎不用修改,所以我们可以用 \(ST\) 表预处理,然后 \(O(\log n)\) 倍增求答案。怕写挂还是写线段树吧。

	friend node operator + (const node &a, const node &b) {
		node res;
		if (~a.p) {
			if (~b.p) {
				res.l = a.l, res.r = b.r;
				res.p = a.p + b.p + abs(a.r - b.l);
			} else {
				res.l = a.l, res.p = a.p;
				if (a.r < b.l)
					res.r = b.l, res.p += b.l - a.r;
				else if (a.r > b.r)
					res.r = b.r, res.p += a.r - b.r;
				else
					res.r = a.r;
			}
		} else {
			if (~b.p) {
				res.r = b.r, res.p = b.p;
				if (a.l > b.l)
					res.l = a.l, res.p += a.l - b.l;
				else if (a.r < b.l)
					res.l = a.r, res.p += b.l - a.r;
				else 
					res.l = b.l;
			} else {
				if (a.r < b.l) 
					res = node(a.r, b.l, b.l - a.r);
				else if (a.l > b.r)
					res = node(a.l, b.r, a.l - b.r);
				else
					res = node(max(a.l, b.l), min(a.r, b.r));
			}
		}
		return res;
	}

\(10\) 种情况分讨的信息合并。。

G - AtCoder Office

我们考虑将询问去重,离线下来,将询问度数求出来,然后每次连边将度数大的挂在度数小的上面,假设 \(B = \sqrt q\),那么对于度数小于等于 \(B\) 的连出去的边至多 \(B\) 条,对于度数大于 \(B\) 的点,相连的点也一定大于 \(B\),那么去重后的点数也至多 \(B\) 个。
然后我们用 \(sum_i\) 表示 \(t_i\) 时间之前,\(p_i\) 这个人的在办公室的时间。
然后从前往后扫 \((t_i,p_i)\),每次记录一下每个人是否在办公室,以及上一次操作这个人的时间,然后遍历出边(询问),和扫描线一样的去做差分即可。
整体复杂度:\(O(m\sqrt q)\)。

标签:node,AtCoder,Beginner,res,度数,else,然后,365
From: https://www.cnblogs.com/weirdoX/p/18341922

相关文章

  • ABC365
    Alink题目已经说的很明白了,判断即可。点击查看代码#include<bits/stdc++.h>usingnamespacestd;inty;signedmain(){ cin>>y; if(y%4!=0)cout<<365; elseif(y%4==0&&y%100!=0)cout<<366; elseif(y%100==0&&y%400!......
  • ABC365
    A.LeapYear模拟代码实现importcalendary=int(input())ifcalendar.isleap(y):print(366)else:print(365)B.SecondBest模拟代码实现n=int(input())a=list(map(int,input().split()))print(a.index(sorted(a)[-2])+1)C.TransportationEx......
  • 【A~E】AtCoder Beginner Contest 365
    A-LeapYear题目大意给定\(n\),求第\(n\)年的天数(\(365\)或\(366\))。思路显然地,我们需要判断这个是否为闰年。如果\(n\)不能被\(4\)整除,那么不是闰年。如果\(n\)可以被\(400\)整除,那么是闰年。如果\(n\)不可以被\(100\)整除但是可以被\(4\)整除,那么是......
  • AtCoder Beginner Contest 365 补题记录(A~E,G)
    Perf2000+,但是补不回来上场超低的Rating/llA#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;signedmain(){intn;cin>>n;if(n%400==0)cout<<"366\n";elseif(n%100==0)cout<<"365\n";......
  • AtCoder Beginner Contest 365 随笔
    擦,F假了A判断闰年B输出次大值的下标用pair排序后即可C给定一个数组\(A_n\)和整数\(M\),尝试找到一个最大的\(m\),使得:\[\sum_{i=1}^n\min(A_i,m)\leM\]不等号左边显然随着\(m\)的增大而增大,所以可以二分一个\(m\),然后判断即可D两个人玩\(n\)局剪刀石头布......
  • ABC365(A-D)未补
    A-LeapYear(模拟)题意:给定一个数字n,如果n不是4的倍数,输出365;如果n是4的倍数但不是100的倍数,输出366;如果n是100的倍数但不是400的倍数,输出365;如果n是400的倍数,输出366分析:模拟题目即可代码:#include<bits/stdc++.h>usingnamespacestd;intmain(){intn;cin>>n;......
  • 如何通过PowerShell批量修改O365用户的office phone属性值
    我的博客园:https://www.cnblogs.com/CQman/如何通过PowerShell批量修改O365用户的officephone属性值?需求信息: 组织中的O365用户在创建时,已手动录入了办公电话(Officephone),现在需要在办公电话前面加上统一的数字,如“0571-0985”,以批量的方式统一修改。备注:O365用户的Offic......
  • Atcoder ABC298 D-F
    AtcoderABC298D-FD-WritingaNumeral链接:D-WritingaNumeral(atcoder.jp)简要题意:问题陈述我们有一个字符串\(S\)。初始值为\(S=\)1.按以下格式依次处理\(Q\)查询。1x:在\(S\)的末尾添加一个数字\(x\)。2:删除\(S\)开头的数字。3:以十进制形......
  • 每日一题——A - Max/Min AtCoder - abc356_e
    1.题目大意:枚举两个数的Max/Min向下取整之和。2.思路:一开始并没有想时间复杂度问题发现通过sort()排序来遍历每个最小值Min和后面最大值的和就是题目答案。你会发现仍然有问题,那就是取整的问题你就必须要优化然后发现很明显超时了。现在我们来换一个角度思考。搭配前缀和嘛。为......
  • Atcoder ABC297 E-G
    AtcoderABC297E-GE-KthTakoyakiSet链接:E-KthTakoyakiSet简要题意:问题陈述有\(N\)种章鱼烧出售。一个\(i\)-种的章鱼烧售价为\(A_i\)日元。高桥总共至少会买一个章鱼烧。他可以购买多个同类章鱼烧。求高桥可能支付的\(K\)个最低价格。在这里,如果有多......