Gym - 101889D:Daunting device (老司机树)
题意:N个格子排出一排,开始格子颜色都是1;现在有M个操作:
或,把区间[L,R]颜色改为c;
或,查询一共有多少格子颜色为c。
最后求颜色最多的数量。
数据是随机的,且强制在线。
思路:ODT裸题。维护相同颜色的区间。 split拆分区间,assign操作收缩区间,由于数据随机,区间的个数趋近于log级别。
注意split的时候先split(R+1),再split(L);因为这个我wa20了;在这里有写。 大概就是会改变指针啥的,我对iterator不了解,所以不知道,记下来好了。
这个在大量区间操作的题目中,如果说明了随机的,或者想试一试的情况下,还是非常优秀(暴力)的。
- #include<bits/stdc++.h>
- #define ll long long
- #define rep(i,a,b) for(int i=a;i<=b;i++)
- using namespace std;
- struct in{
- int L,R,v;
- in(){}
- in(int LL,int RR,int vv):L(LL),R(RR),v(vv){}
- friend bool operator<(in a,in b){
- if(a.L==b.L) return a.R<b.R;
- return a.L<b.L;
- }
- };
- set<in>s;
- #define IT set<in>::iterator
- int num[],ans;
- IT split(int pos)
- {
- IT it=s.lower_bound(in(pos,-,-));
- if(it!=s.end()&&(*it).L==pos) return it;
- it--;
- int l=(*it).L,r=(*it).R,v=(*it).v;
- s.erase(it);
- s.insert(in(l,pos-,v));
- return s.insert(in(pos,r,v)).first;
- }
- void Assign(int L,int R,int X)
- {
- IT it2=split(R+),it1=split(L);
- for(IT it=it1;it!=it2;it++) {
- num[(*it).v]-=((*it).R-(*it).L+);
- }
- s.erase(it1,it2);
- s.insert(in(L,R,X));
- num[X]+=R-L+;
- }
- int main()
- {
- int N,L,C,P,X,A,B,S;
- scanf("%d%d%d",&L,&C,&N);
- s.insert(in(,L-,)); num[]=L;
- rep(i,,N){
- scanf("%d%d%d%d",&P,&X,&A,&B); A%=L; B%=L;
- S=num[P]%L;
- int l=(A+1LL*S*S%L)%L,r=(A+1LL*(S+B)*(S+B)%L)%L;
- Assign(min(l,r),max(l,r),X);
- }
- rep(i,,C) ans=max(ans,num[i]);
- printf("%d\n",ans);
- return ;
- }
Gym - 101889D:Daunting device (老司机树)的更多相关文章
- [BZOJ4200][Noi2015]小园丁与老司机
4200: [Noi2015]小园丁与老司机 Time Limit: 20 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 106 Solved ...
- 老司机学新平台 - Xamarin开发之我的第一个MvvmCross跨平台插件:SimpleAudioPlayer
大家好,老司机学Xamarin系列又来啦!上一篇MvvmCross插件精选文末提到,Xamarin平台下,一直没找到一个可用的跨平台AudioPlayer插件.那就自力更生,让我们就自己来写一个吧! ...
- 老司机学新平台 - Xamarin Forms开发框架之MvvmCross插件精选
在前两篇老司机学Xamarin系列中,简单介绍了Xamarin开发环境的搭建以及Prism和MvvmCross这两个开发框架.不同的框架,往往不仅仅使用不同的架构风格,同时社区活跃度不同,各种功能模块 ...
- 老司机学新平台 - Xamarin开发环境及开发框架初探
随着被微软收购,最近一年间,Xamarin的火爆程度与日俱增.免费.更好的VS2015集成.更好的模拟器,甚至,在windows上运行和调试iOS平台程序,让我这样接触了十几年.NET平台的老司机,即 ...
- 老司机带你用vagrant打造一站式python开发测试环境
前言 作为一个学习和使用Python的老司机,好像应该经常总结一点东西的,让新司机尽快上路,少走弯路,然后大家一起愉快的玩耍. 今天,咱们就使用vagrant配合xshell打造一站式Python ...
- [BZOJ]4200: [Noi2015]小园丁与老司机
Time Limit: 20 Sec Memory Limit: 512 MBSec Special Judge Description 小园丁 Mr. S 负责看管一片田野,田野可以看作一个二维 ...
- [Noi2015]小园丁和老司机
来自FallDream的博客,未经允许,请勿转载,谢谢. 小园丁 Mr. S 负责看管一片田野,田野可以看作一个二维平面.田野上有n棵许愿树,编号1,2,3,…,n,每棵树可以看作平面上的一个点,其中 ...
- uoj132/BZOJ4200/洛谷P2304 [Noi2015]小园丁与老司机 【dp + 带上下界网络流】
题目链接 uoj132 题解 真是一道大码题,,,肝了一个上午 老司机的部分是一个\(dp\),观察点是按\(y\)分层的,而且按每层点的上限来看可以使用\(O(nd)\)的\(dp\),其中\(d\ ...
- Kali Linux来袭~老司机带你进击
Kali是BackTrackLinux完全遵循Debian开发标准彻底的完全重建.全新的目录框架,复查并打包所有工具,我们还为VCS建立了Git树. 本次推荐内容主要介绍Kali-Linux的安装,包 ...
随机推荐
- Weblogic domain扩展教程
weblogic扩展domain有两种扩展,一是机器上已有要扩展的domain只是在其内增加受管服务器,二是机器上没有domain要新建domain然后增加受管服务器 一.机器上已有要扩展的domai ...
- vue 中使用 Toast弹框
import { ToastPlugin,ConfirmPlugin,AlertPlugin} from 'vux' Vue.use(ToastPlugin) Vue.use(ConfirmPlugi ...
- Elasticsearch安装部署(CentOS)
1.安装JDK,http://www.cnblogs.com/zhi-leaf/p/5996287.html. 2.下载ES:https://www.elastic.co/downloads/elas ...
- Shell编程积累 zhuan
在新的shell里执行程序 cd /home/lq/Server/anew-lstm_scriptmatlab -nodesktop -singleCompThred -r 'aStart' ,qui ...
- 关于datetimepicker只显示年、月、日的设置
如下是只显示月的sample code: <link rel="stylesheet" href="css/datetimepicker/bootstrap-dat ...
- linux系统管理 计划任务
一次性计划任务 命令: at 语法: at [-f 文件名] 时间 绝对计时方法 HH:MM yyyy-MM-dd 相对计时方法 now + n minutes now+n hours now + n ...
- Java 方法重载 方法重写
方法重载规则 参数个数不同 参数个数相同,但参数列表中对应的某个参数的类型不一样 方法的返回类型和参数名称不参与重载 "编译期绑定",,因为未产生对象,只看参数.引用类型绑定方法 ...
- html5游戏之Box2d物理引擎集成
前面两章我们已经研究了如何使用Box2d来模拟游戏世界,这一章就把所有的东西拼凑在一起,最终完成我们的游戏. 一.定义物体 典型的物体: {type:'ground',name:'dirt',x:50 ...
- IO多路复用,select、poll、epoll 编程主要步骤
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- sass的加减乘除
运算 时单位要一样 否则报错 除法时 要加() width: (100px / 2); 符号在已有的数学表达式中时,也会被认作除法符号,就不要加() .box { width: 100px / 2 + ...