A

  一道不错的题,虽然大家都觉得是水题,然而蒟蒻我想出来的好慢……Orz alpq

  发现其实就是一个网格图,每一个大块都是同一颜色……横纵坐标互不干扰……

 //UOJ Round #8 A
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=1e5+;
/*******************template********************/ int n,m,x[N],y[N];
int bel1[N],bel2[N],cnt1,cnt2;
int main(){
#ifndef ONLINE_JUDGE
freopen("A.in","r",stdin);
freopen("A.out","w",stdout);
#endif
n=getint(); m=getint();
F(i,,n) x[i]=getint();
F(i,,m) y[i]=getint();
int now=x[];
bel1[]=; cnt1=;
F(i,,n){
if (x[i]!=now){
cnt1++;
now=x[i];
}
bel1[i]=cnt1;
}
now=y[]; bel2[]=; cnt2=;
F(i,,m){
if (y[i]!=now){
cnt2++;
now=y[i];
}
bel2[i]=cnt2;
} int Q=getint();
F(i,,Q){
int x1=getint(),y1=getint(),x2=getint(),y2=getint();
if (x2<x1) swap(x1,x2); if (y2<y1) swap(y1,y2);
int t1=min(bel1[x2]-bel1[x1],cnt1-bel1[x2]+bel1[x1]-(x[]==x[n]));
int t2=min(bel2[y2]-bel2[y1],cnt2-bel2[y2]+bel2[y1]-(y[]==y[m]));
printf("%d\n",t1+t2);
}
return ;
}

B

  线段树的好题!(话说为什么我感觉那么像KD-Tree……

  前两个操作就是普通线段树维护就可以……

  查询的时候,感觉就是将n个点的横坐标固定成1~n了……然后用KD-Tree的估价函数来判断是否进入子树查询……

  我一开始query写的逗比了,膜了一下vfk的姿势……

  然后这题我TLE了好久……

  重点是题解里说的:先判断右子树,再判断左子树!!!(就像KD-Tree的时候,要先像估价值较大的那一侧走啊!我怎么给忘了……sad

 //UOJ Round #8 B
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=1e5+;
/*******************template********************/ int n,m,x0,v[N],mn[N<<],mx[N<<];
bool rev[N<<];
inline int ran(){
x0=((LL)x0*+)%;
return x0/;
}
#define mid (l+r>>1)
#define L (o<<1)
#define R (o<<1|1)
void maintain(int o,int l,int r){
mn[o]=min(mn[L],mn[R]);
mx[o]=max(mx[L],mx[R]);
}
void change(int o){
rev[o]^=;
mn[o]=-mn[o]; mx[o]=-mx[o];
swap(mn[o],mx[o]);
}
void Push_down(int o,int l,int r){
if (rev[o]){
change(L); change(R);
rev[o]=;
}
}
void build(int o,int l,int r){
if (l==r){
mn[o]=mx[o]=ran()%;
}else{
build(L,l,mid);
build(R,mid+,r);
maintain(o,l,r);
}
}
void update(int o,int l,int r,int p,int val){
if (l==r){
mn[o]=mx[o]=val;
}else{
Push_down(o,l,r);
if (p<=mid) update(L,l,mid,p,val);
else update(R,mid+,r,p,val);
maintain(o,l,r);
}
}
void modify(int o,int l,int r,int ql,int qr){
if (ql<=l && qr>=r){
change(o);
}else{
Push_down(o,l,r);
if (ql<=mid) modify(L,l,mid,ql,qr);
if (qr>mid) modify(R,mid+,r,ql,qr);
maintain(o,l,r);
}
} LL ans=;
int a,b,c;
inline LL calc(int x,int y){return (LL)a*x+(LL)b*y+(LL)c*x*y;}
void query(int o,int l,int r,int ql,int qr){
if (calc(min(r,qr),mx[o])<=ans) return;
if (l==r){
ans=calc(l,mx[o]);
return;
}
Push_down(o,l,r);
if (qr>mid) query(R,mid+,r,ql,qr);
if (ql<=mid) query(L,l,mid,ql,qr);
} int main(){
#ifndef ONLINE_JUDGE
freopen("B.in","r",stdin);
freopen("B.out","w",stdout);
#endif
n=getint(); m=getint(); x0=getint();
// F(i,1,n) v[i]=ran()%100001;
build(,,n);
char cmd;
F(i,,m){
while(cmd=getchar(),cmd!='C' && cmd!='R' && cmd!='Q');
if (cmd=='C'){
int p=ran()%n+,y=ran()%;
update(,,n,p,y);
}else if (cmd=='R'){
int ql=ran()%n+,qr=ran()%n+;
if (qr<ql) swap(ql,qr);
modify(,,n,ql,qr);
}else if (cmd=='Q'){
a=getint(),b=getint(),c=getint();
int ql=ran()%n+,qr=ran()%n+;
if (qr<ql) swap(ql,qr);
ans=;
query(,,n,ql,qr);
printf("%lld\n",ans);
}
}
return ;
}

【UOJ Round #8】的更多相关文章

  1. 【UOJ Round #5】

    构造+贪心/数论 为什么只有两个标题呢……因为第二题我不会…… 怎样提高智商 构造题……然而一开始半天我都yy不出来…… 后来我想:这题应该不会特别麻烦,而且既然样例只给了1,可能再给大一点就让人发现 ...

  2. 【UOJ Round #1】

    枚举/DP+排列组合 缩进优化 QAQ我当时一直在想:$min\{ \sum_{i=1}^n (\lfloor\frac{a[i]}{x}\rfloor + a[i] \ mod\ x) \}$ 然而 ...

  3. 【UOJ Round #3】

    枚举/二分 C题太神窝看不懂…… 核聚变反应强度 QwQ很容易发现次小的公约数一定是gcd的一个约数,然后……我就傻逼地去每次算出a[1],a[i]的gcd,然后枚举约数……这复杂度……哦呵呵... ...

  4. 【CS round 34】Minimize Max Diff

    [题目链接]:https://csacademy.com/contest/round-34/task/minimize-max-diff/ [题意] 给你n个数字; 数组按顺序不下降; 让你删掉k个数 ...

  5. 【CS Round 34】Max Or Subarray

    [题目链接]:https://csacademy.com/contest/round-34/summary/ [题意] 让你找一个最短的连续子串; 使得这个子串里面所有数字or起来最大; [题解] 对 ...

  6. UOJ #30【CF Round #278】Tourists

    求从$ x$走到$ y$的路径上可能经过的最小点权,带修改  UOJ #30 $ Solution:$ 如果两个点经过了某个连通分量,一定可以走到这个连通分量的最小值 直接构建圆方树,圆点存原点的点权 ...

  7. UOJ #30. 【CF Round #278】Tourists

    Description Cyberland 有 n 座城市,编号从 1 到 n,有 m 条双向道路连接这些城市.第 j 条路连接城市 aj 和 bj.每天,都有成千上万的游客来到 Cyberland ...

  8. 【57.97%】【codeforces Round #380A】Interview with Oleg

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  9. 【42.86%】【Codeforces Round #380D】Sea Battle

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

随机推荐

  1. C#一步一步学网络辅助开发(1)--常用抓包工具的使用

    这次写的是一个系列,是让大家了解如何进行网络的辅助开发.要进行网络辅助开发抓包工具是必不可少的,下面就让大家熟悉一下常用的一些抓包工具, 1,Fiddler 这个工具是我目前用的最多的一款抓包工具,不 ...

  2. 基于 Laravel 开发博客应用系列 —— 设置 Windows 本地开发环境

    1.安装原生PHP 下载/解压 PHP 到 PHP 下载页下载最新版本的 PHP(如果使用 Laravel 5.1 的话需要 PHP 5.5.9+ 版本),解压下载的zip格式压缩文件到本地目录,比如 ...

  3. PHP isset和empty 详细比较

    找了几篇博文,这应该是说的最清楚的.链接如下:http://blog.chinaunix.net/uid-25311424-id-3966622.html

  4. spring boot mybatis 多数据源配置

    package com.xynet.statistics.config.dataresources; import org.springframework.jdbc.datasource.lookup ...

  5. 【记录】【持续更新】mybatis使用记录

    1.>  < 等符号在mybatis中的sql语句需要转义 > : > < : < 2.mybatis动态选择 <choose> <when te ...

  6. 一个将PDF转word、图片、PPT的在线工具

    smallpdf 真的超级棒! https://smallpdf.com/cn

  7. DataGridView、List<T>相关操作

    一.DataGridView数据转成DataTable 1.已绑定过数据源:DataTable dt = (dataGridView1.DataSource as DataTable) 2.未绑定过数 ...

  8. SQL SERVER 扩展属性的操作方法

    将数据库迁移到 Azure SQL 数据库时出现错误,不支持扩展属性“MS_Description”,因此就如何操作扩展属性进行在此记录. 查询扩展属性 SELECT *,OBJECT_NAME(ma ...

  9. C++使用new和不使用new创建对象区别

    前言 在使用面向对象的时候,发现使用new和不使用new创建的对象区别还是蛮大的,做个总结: 总结 new创建的是一个指向类对象的指针,需要指针进行接收,一处初始化,多处使用,但是不用new创建的话不 ...

  10. 【转载】VC操作剪切板

    1.在剪切板上放置数据 if(OpenClipboard())    //打开剪切板{    EmptyClipboard(); //清空剪切板    CString str;       //从控件 ...