Physical Education Lessons CodeForces - 915E This year Alex has finished school, and now he is a first-year student of Berland State University. For him it was a total surprise that even though he studies programming, he still has to attend physical…
http://codeforces.com/problemset/problem/915/E 大概有几种思路: 1.动态开点线段树+标记下传 #1.1标记永久化:想了一会没想出来 1.2可以先扫一遍询问把所有需要的点建出来,然后pushdown就不管没建出来的点了,空间跟标记永久化一样 2.离散化+线段树 3.用splay维护区间(估计没人愿意去写) 4.用一个set<pair<int,int>>记所有非工作日(或工作日)区间,修改就暴力找到相关的区间去改 由于每一次操作最多多出O…
原题传送门 我承认,比赛的时候在C题上卡了好久(最后也不会),15min水掉D后(最后还FST了..),看到E时已经只剩15min了.尽管一眼看出是离散化+线段树的裸题,但是没有时间写,实在尴尬. 赛后先照习惯码出线段树,提交上去WA4???看了好久没看出问题,怎么调都不对.这时TJW忽悠我:"我写的可持久化线段树啊,不用离散化了啊."我信了,码出主席树(实话说确实不用想那么多了,无脑动态开点就行了),提交上去TLE18???回头一问TJW:"我FST了啊."我:(…
E. Physical Education Lessons 题目:一段长度为n的区间初始全为1,每次成段赋值0或1,求每次操作后的区间总和.(n<=1e9,q<=3e5) 题意:用线段树做的话,没什么思维量,主要是空间复杂度的问题.因此采用动态开点的办法,即需要用到的节点,在使用前分配内存,没有用到的就虚置.这样每次操作新增的节点约logn个.则q次修改需要的空间大约是qlogn.但是,在这个数量级上尽可能开的再大一些,防止RE. #include<bits/stdc++.h> #…
题目描述 This year Alex has finished school, and now he is a first-year student of Berland State University. For him it was a total surprise that even though he studies programming, he still has to attend physical education lessons. The end of the term i…
[题目]E. Physical Education Lessons [题意]10^9范围的区间覆盖,至多3*10^5次区间询问. [算法]线段树 [题解]每次询问至多增加两段区间,提前括号分段后线段树. #include<cstdio> #include<cctype> #include<set> #include<algorithm> using namespace std; int read(){ ,t=; ; +c-';}while(isdigit(c…
题目链接 CF915E Physical Education Lessons 题解 动态开点线段树 代码 /* 动态开点线段树 */ #include<cstdio> #include<cstring> #include<algorithm> inline int read() { int x = 0,f = 1; char c = getchar() ; while(c < '0' || c > '9')c = getchar(); while(c <…
原题传送门:CF915E Physical Education Lessons 前置芝士:珂朵莉树 窝博客里对珂朵莉树的介绍 没什么好说的自己看看吧 这道题很简单啊 每个操作就是区间赋值,顺带把总和修改一下,这样会快多了,所以我又成了洛咕最优解第二(好像比23forever dalao快,玄学???) #pragma GCC optimize("O3") #include <bits/stdc++.h> #define IT set<node>::iterato…
题意: Alex高中毕业了,他现在是大学新生.虽然他学习编程,但他还是要上体育课,这对他来说完全是一个意外.快要期末了,但是不幸的Alex的体育学分还是零蛋! Alex可不希望被开除,他想知道到期末还有多少天的工作日,这样他就能在这些日子里修体育学分.但是在这里计算工作日可不是件容易的事情: 从现在到学期结束还有 n 天(从 1 到 n 编号),他们一开始都是工作日.接下来学校的工作人员会依次发出 q 个指令,每个指令可以用三个参数 l,r,k 描述: 如果 k=1,那么从 l 到 r (包含端…
题目一:E. Infinite Inversions 这个题目没什么思维量,还比较简单,就是离散化要加上每一个值的后面一个值,然后每一个值放进去的不是1 ,而是这个值与下一个点的差值. 因为这个数代表了一堆数,然后每一次的找到了的逆序对都要乘以这个num. #include <cstdio> #include <cstdlib> #include <cstring> #include <queue> #include <vector> #incl…
E. Physical Education Lessons time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output This year Alex has finished school, and now he is a first-year student of Berland State University. For him it…
题意: 最大$10^9$的区间, $3*10^5$次区间修改,每次操作后求整个区间的和 题解: 裸的动态开点线段树,计算清楚数据范围是关键... 经过尝试 $2*10^7$会$MLE$ $10^7$会$RE$ 用$vector$但是一开始没有$resize$到最大也会$MLE$ 如果节点内部信息保存了节点的区间,无论怎么样都会$MLE$ 最终$1.5*10^7$的$vector$/数组可以过 #include <bits/stdc++.h> #define endl '\n' #define…
[题目链接] 点击打开链接 [算法] 线段树,注意数据量大,要动态开点 [代码] #include<bits/stdc++.h> using namespace std; ; ,root = ; struct Node { int lc,rc,tag,sum; } Tree[MAXN]; template <typename T> inline void read(T &x) { ; x = ; char c = getchar(); for (; !isdigit(c);…
https://codeforces.com/contest/893/problem/F 题意: 给一个有根树, 多次查询,每次查询对于$x$i点的子树中,距离$x$小于等于$k$的所有点中权值最小的一个 查询强制在线 题解: 显然,暴力就是,对于每次搜索深搜距离x小于$k$的所有点搜索 那么我们考虑优化 首先,查询对$x$距离小于$k$的所有点,等价于在整颗树上,查询$\forall dep(x)≤dep(i)≤dep(x)+k$中,在$x$子树中的点的最小值 那么,一个大胆的想法就是,对于每…
提供两种思路 一种线段树区间更新 另一种用map维护连续的区间,也是题解的思路 第二种很难写(我太渣,看了别人的代码,发现自己写的太烦了) #include<iostream> #include<map> #include<iostream> #include<cstring> #include<cstdio> #include<set> #include<vector> #include<queue> #in…
传送门 ODT水题(当然可以上线段树) 支持区间01覆盖,询问全局1的个数. 思路:直接上ODTODTODT. 不会的点这里 代码: #include<bits/stdc++.h> #define ri register int using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch))ans=(ans<&…
中文题面 据说正解是动态开点线段树而且标记也不难下传的样子 然而这种区间推平的题目还是喜欢写珂朵莉树啊……码量小…… 虽然真要构造的话随便卡…… //minamoto #include<cstdio> #include<set> #include<iostream> #define IT set<node>::iterator using namespace std; #define getc() (p1==p2&&(p2=(p1=buf)+…
传送门 简单的线段树区间修改区间查询,但是因为数据范围过大,所以采用动态开点的方法(注意一下空间问题). 也可以直接对询问区间的端点离散化然后建树,这种方法时间复杂度和空间复杂度都比较优秀. 给出动态开点的代码: /* * Author: heyuhhh * Created Time: 2019/11/12 19:33:21 */ #include <bits/stdc++.h> #define MP make_pair #define fi first #define se second #…
问题描述 CF915E LG-CF915E 题解 \(n \le 10^9\) 看上去非常唬人. 但是这种区间操作的题,珂朵莉树随便跑啊. \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; template <typename Tp> void read(Tp &x){ x=0;char ch=1;int fh; while(ch!='-'&&(ch<'0'||ch>'9…
题目链接:点击打开链接 题意:给定n个数的序列(能够排序) 操作一次能够使得某个数++或--. 问最少操作几次使得序列变成一个等差序列 输出: 第一行输出最少操作的次数 第二行输出等差数列里的最小项 和 公差的绝对值. 思路:枚举公差,公差范围一定是0到 2Max. 先排个序. 我们使得首项不变.形成一个等差数列. 然后让整个数列位移至 操作后的数组的差值 最小值 == 0.这样这个数列的操作次数= 最大的差值/2. done. #include <iostream> #include <…
http://codeforces.com/contest/394/problem/D 题意:给你n个数,然后通过操作使得这n个数变为一个等差数列,操作是可以经过小于等于k次加1或减去1,要使得k尽量小. 思路:通过枚举公差d,然后通过每一个减去相应的个数的d,找到首项,每一个都可以得到一个首项,在这些首项中找到最大值和最小值,我们取最大值和最小值的一半为a1,然后找到一个k,在等到的很多个k中找到最小值. #include <cstdio> #include <cstring>…
我一直以来都错认为离散化就是换个映射,其实还需要在离散值两端加上相差为1的值才能真正离散 不然看一下test3就知道 不过这个离散姿势太暴力,以至于我1000ms时限跑出998ms(其实是太懒没有删重复的排序..) 线段树区间覆盖没啥好说的,自我感觉struct里写的足够清晰了 终于能睡个好觉了 #include<bits/stdc++.h> using namespace std; const int maxn = 3e6+11; int ll[maxn],rr[maxn],mark[max…
题目链接:https://vjudge.net/contest/254142#problem/G 参考题解:https://blog.csdn.net/zearot/article/details/47984379 #include <bits/stdc++.h> using namespace std; #define ll long long #define LL __int128 #define ull unsigned long long #define mst(a,b) memset…
题目 晚上有n个亮着的灯泡,标号从1到n. 现在存在2种操作,如下: 操作1,关掉标号 [l,r] 区间的灯 操作2,打开标号 [l,r] 区间的灯 下面有q次询问,每次询问执行其中一种操作,询问格式,l,r,k,k为执行操作种类.对于每次询问回答当前开着的灯的数量. Input 单组输入,第一行包含一个整数n,第二行一个整数q(1≤n≤10^9,1≤q≤3·10^5) 接下来q行每行3个整数表示询问,l,r,k(1 ≤ l ≤ r ≤ n, 1 ≤ k ≤ 2). Output 对于每次询问回…
Description Student Andrey has been skipping physical education lessons for the whole term, and now he must somehow get a passing grade on this subject. Obviously, it is impossible to do this by legal means, but Andrey doesn't give up. Having obtaine…
A - A codeforces 714A Description Today an outstanding event is going to happen in the forest — hedgehog Filya will come to his old fried Sonya! Sonya is an owl and she sleeps during the day and stay awake from minute l1 to minute r1 inclusive. Also,…
比赛感想 本来21:05开始的比赛,结果记成21:30了...晚了25分钟才开始[捂脸] 这次是Educational Round,所以还比较简单. 前两道题一眼看去模拟+贪心,怕错仔细看了好几遍题,很快切掉 第三题,dfs+贪心 一开始想得有点简单,少了几种情况,写代码时才发现问题-- 悲伤地发现 写+调 这道题用了我很长时间-(这叫什么?基础不牢,地动山摇!) 然后,居然只剩40分钟了-- 第四题,啊啊啊! 图论,我的痛! 果断跳过 第五题,额,不就是个线段树么? n<=10 \(^9\)…
B. Forgerytime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputStudent Andrey has been skipping physical education lessons for the whole term, and now he must somehow get a passing grade on this subjec…
CF习题集一 一.CF915E Physical Education Lessons 题目描述 \(Alex\)高中毕业了,他现在是大学新生.虽然他学习编程,但他还是要上体育课,这对他来说完全是一个意外.快要期末了,但是不幸的\(Alex\)的体育学分还是零蛋! \(Alex\)可不希望被开除,他想知道到期末还有多少天的工作日,这样他就能在这些日子里修体育学分.但是在这里计算工作日可不是件容易的事情: 从现在到学期结束还有 \(n\) 天(从 \(1\) 到 \(n\) 编号),他们一开始都是工…
time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Smart Beaver decided to be not only smart, but also a healthy beaver! And so he began to attend physical education classes at school X. In t…