uoj#119. 【UR #8】决战圆锥曲线
可以认为数据基本随机,于是可以直接用线段树维护,对每个询问在线段树上进行剪枝搜索。
#include<bits/stdc++.h>
typedef long long i64;
char ib[],*ip=ib,ob[],*op=ob;
int _(){
int x=;
while(*ip<)++ip;
while(*ip>)x=x*+*ip++-;
return x;
}
void pr(i64 x){
int ss[],sp=;
do ss[++sp]=x%;while(x/=);
while(sp)*op++=ss[sp--]+;
*op++=;
}
i64 max(i64 a,i64 b){return a>b?a:b;}
int n,m,seed,_l,_r;
i64 A,B,C,ans;
int mt(){
seed=(seed*100000005ll+)%;
return seed/;
}
struct node{
node*lc,*rc;
int L,R,M;
int rv;
i64 y1,y2,xy1,xy2;
void _rv(){
std::swap(y1,y2);
std::swap(xy1,xy2);
rv^=;
}
void dn(){
if(rv){
rv=;
lc->_rv();
rc->_rv();
}
}
void up(){
y1=max(lc->y1,rc->y1);
y2=max(lc->y2,rc->y2);
xy1=max(lc->xy1,rc->xy1);
xy2=max(lc->xy2,rc->xy2);
}
void init(int v){
y1=v,y2=-v;
xy1=i64(L)*y1,xy2=i64(L)*y2;
}
void chg(){
if(L==R)return init(A);
dn();
(_l<=M?lc:rc)->chg();
up();
}
void rev(){
if(_l<=L&&R<=_r)return _rv();
dn();
if(_l<=M)lc->rev();
if(_r>M)rc->rev();
up();
}
i64 cal(){
return A*R+B*y1+C*xy1;
}
void find(i64 v){
if(_l>R||_r<L||v<=ans)return;
if(L==R)return void(ans=v);
dn();
i64 vl=lc->cal(),vr=rc->cal();
if(vl>vr)lc->find(vl),rc->find(vr);
else rc->find(vr),lc->find(vl);
}
}ns[],*np=ns,*rt;
node*build(int L,int R){
node*w=np++;
w->L=L,w->R=R;
if(L<R){
int M=w->M=L+R>>;
w->lc=build(L,M);
w->rc=build(M+,R);
w->up();
}else w->init(mt()%);
return w;
}
int main(){
fread(ib,,sizeof(ib),stdin);
n=_(),m=_(),seed=_();
rt=build(,n);
while(m--){
int o=_();
if(o=='C'-){
_l=mt()%n+,A=mt()%;
rt->chg();
}else{
_l=mt()%n+,_r=mt()%n+;
if(_l>_r)std::swap(_l,_r);
if(o=='R'-){
rt->rev();
}else{
A=_(),B=_(),C=_();
ans=;
if(A|B|C)rt->find(rt->cal());
pr(ans);
}
}
}
fwrite(ob,,op-ob,stdout);
return ;
}
uoj#119. 【UR #8】决战圆锥曲线的更多相关文章
- uoj#119. 【UR #8】决战圆锥曲线(线段树+复杂度分析)
题解 传送门 题解 然而要我来说我感觉只是个爆搜啊-- //minamoto #include<bits/stdc++.h> #define R register #define ll l ...
- UOJ 【UR #5】怎样跑得更快
[UOJ#62]怎样跑得更快 题面 这个题让人有高斯消元的冲动,但肯定是不行的. 这个题算是莫比乌斯反演的一个非常巧妙的应用(不看题解不会做). 套路1: 因为\(b(i)\)能表达成一系列\(x(i ...
- UOJ #22 UR #1 外星人
LINK:#22. UR #1 外星人 给出n个正整数数 一个初值x x要逐个对这些数字取模 问怎样排列使得最终结果最大 使结果最大的方案数又多少种? n<=1000,x<=5000. 考 ...
- UOJ.52.[UR #4]元旦激光炮(交互 思路)
题目链接 \(Description\) 交互库中有三个排好序的,长度分别为\(n_a,n_b,n_c\)的数组\(a,b,c\).你需要求出所有元素中第\(k\)小的数.你可以调用至多\(100\) ...
- UOJ【UR #12】实验室外的攻防战
题意: 给出一个排列$A$,问是否能够经过以下若干次变换变为排列$B$ 变换:若${A_i> A_i+1}$,可以${swap(A_i,A_i+1)}$ 考虑一个数字从A排列到B排列连出来的路径 ...
- ZJOI2019Round#1
考的这么差二试基本不用去了 不想说什么了.就把这几天听课乱记的东西丢上来吧 这里是二试乱听课笔记ZJOI2019Round#2 ZJOI Round#1 Day1 M.<具体数学>选讲 罗 ...
- 【UOJ#33】【UR#2】树上GCD 有根树点分治 + 容斥原理 + 分块
#33. [UR #2]树上GCD 有一棵$n$个结点的有根树$T$.结点编号为$1…n$,其中根结点为$1$. 树上每条边的长度为$1$.我们用$d(x,y)$表示结点$x,y$在树上的距离,$LC ...
- uoj #118. 【UR #8】赴京赶考 水题
#118. [UR #8]赴京赶考 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/118 Description ...
- uoj #31. 【UR #2】猪猪侠再战括号序列 贪心
#31. [UR #2]猪猪侠再战括号序列 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/31 Descript ...
随机推荐
- RuntimeError: Broken toolchain: cannot link a simple C program
今天Python2.7下安装numpy的时候遇到了此错误,进过查阅发现以下方法可行 在Python27\Lib\distutils\msvc9compiler.py 文件中,找到 mfinfo = s ...
- python 中os的常用方法
1.更改当前的路径 import os os.chdir( "D:/java") 注意python中表示文件路径,文件夹之间用/或者\\不能使用\
- 51nod- 【1042 数字0-9的数量 】
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1042 题目: 1042 数字0-9的数量 基准时间限制:1 ...
- Flutter,H5,React Native
Flutter介绍 - Flutter,H5,React Native之间的对比 Flutter介绍 Flutter是Google推出的开源移动应用开发框架.开发者可以通过开发一套代码同时运行在i ...
- lucene随笔 IKAnalyzer StandardAnalyzer
StandardAnalyzer 是单词分词器: String msg = "我喜欢你,我的祖国!china 中国,I love you!中华人民共和国"; 分词后的结果:[我], ...
- ubuntu安装mysql遇到的问题
ERROR 1698 (28000): Access denied for user 'root'@'localhost' ubantu linux下安装新版mysql,登录时必须sudo mysql ...
- OpenGL编程-第一个程序-画出一个正方形
账号是:qq876....... pwd:bky.13....................... 程序如下 #include <GL/glut.h> // #pragma comm ...
- hive 分隔符替换
Hive建表的时候虽然可以指定字段分隔符,不过用insert overwrite local directory这种方式导出文件时,字段的分割符会被默认置为\001,一般都需要将字段分隔符转换为其它字 ...
- nginx实现nginx/tomcat负载均衡
准备三台centos7虚拟机,全部安装nginx或者tomcat 虚拟机A 10.0.3.46 在index.html 中添加10.0.3.46作为标志 虚拟机B 10.0.3.66 ...
- unzip命令
unzip命令用于解压缩由zip命令压缩的“.zip”压缩包. 语法 unzip(选项)(参数) 选项 -c:将解压缩的结果显示到屏幕上,并对字符做适当的转换: -f:更新现有的文件: -l:显示压缩 ...