\(T1\)石子与HH与HHの取

博弈是不可能会的

\(c_i\)相等,比较显然的\(Nim,\)直接前缀异或求一下

\(a_i=1,\)区间长度对\(2\)取模

结论\(:\)黑色石子严格大于白色个数先手赢

反证,小于等于的话,我们后手肯定存在策略使自己异或和不为\(0\)

特殊情况,先手只有一堆,并且后手此时异或和为\(0,\)寄

讨论完之后用简单数据结构维护即可

\(T2\)离子王国

能想到扫描线就比较显然了

结论很好猜\(:\)当\(k\)在最大值和最小值之间的时候有解

//考场上已经想到求区间最大最小解决了(不会维护)
//扫描线之类的题我还是不是很会
//首先我们线段树维护的是我们插入后面每个l的历史最大值
//我们只需要查区间最小最大及出现位置即可啦,感觉很强,我考场上离正解就差一步扫描线
#include<bits/stdc++.h>
#define MAXN 500005
using namespace std;
const int INF=0x3f3f3f3f;
template<class T>
T Read()
{
T x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^'0');
ch=getchar();
}
return x*f;
}
int (*read)()=Read<int>;
#define read Read<int>
struct Que
{
int l,r,k,id,res;
}que[MAXN];
int n,m,s[MAXN],val[MAXN];
vector<int>poz[MAXN];
namespace Seg
{
#define ls (x<<1)
#define rs ((x<<1)|1)
int lz[MAXN<<1],Max[MAXN<<1],Min[MAXN<<1],TagMax[MAXN<<1],TagMin[MAXN<<1];
int SumMax[MAXN<<1],SumMin[MAXN<<1];
void Init(){for(int i=1;i<2*MAXN;i++) TagMax[i]=Max[i]=-INF,TagMin[i]=Min[i]=INF;}
void pd(int x,int l,int r)
{
if(l==r)
{
lz[x]=0,TagMax[x]=-INF,TagMin[x]=INF;
return ;
}
//关于这个历史最大值最小值
//每个时刻的Tag/Sum都记录一下
Max[ls]=max(Max[ls],SumMax[ls]+TagMax[x]);
Min[ls]=min(Min[ls],SumMin[ls]+TagMin[x]);
SumMax[ls]+=lz[x];
SumMin[ls]+=lz[x];
TagMax[ls]=max(TagMax[ls],lz[ls]+TagMax[x]);
TagMin[ls]=min(TagMin[ls],lz[ls]+TagMin[x]);
lz[ls]+=lz[x]; Max[rs]=max(Max[rs],SumMax[rs]+TagMax[x]);
Min[rs]=min(Min[rs],SumMin[rs]+TagMin[x]);
SumMax[rs]+=lz[x];
SumMin[rs]+=lz[x];
TagMax[rs]=max(TagMax[rs],lz[rs]+TagMax[x]);
TagMin[rs]=min(TagMin[rs],lz[rs]+TagMin[x]);
lz[rs]+=lz[x]; lz[x]=0,TagMax[x]=-INF,TagMin[x]=INF;
}
void push_up(int x)
{
SumMax[x]=max(SumMax[ls],SumMax[rs]);
SumMin[x]=min(SumMin[ls],SumMin[rs]);
Max[x]=max(Max[ls],Max[rs]);
Min[x]=min(Min[ls],Min[rs]);
}
void change(int x,int l,int r,int L,int R,int v)
{
pd(x,l,r);
if(l>=L&&r<=R)
{
SumMax[x]+=v;
SumMin[x]+=v;
Max[x]=max(Max[x],SumMax[x]);
Min[x]=min(Min[x],SumMin[x]);
lz[x]+=v;
TagMax[x]=max(TagMax[x],lz[x]);
TagMin[x]=min(TagMin[x],lz[x]);
return ;
}
int mid=(l+r)>>1;
if(L<=mid)change(ls,l,mid,L,R,v);
if(R>mid) change(rs,mid+1,r,L,R,v);
push_up(x);
}
int query(int x,int l,int r,int L,int R,int v)
{
if(l==r) return l;
pd(x,l,r);
int mid=(l+r)>>1;
if(l<=mid&&Min[ls]<=v&&Max[ls]>=v) return query(ls,l,mid,L,R,v);
else if(R>mid&&Min[rs]<=v&&Max[rs]>=v) return query(rs,mid+1,r,L,R,v);
return INF;
}
}
void Tr_change(int x)
{
int f=val[s[x]];
for(int i=0;i<poz[s[x]].size();i++)
{
if(poz[s[x]][i]>x) Seg::change(1,1,n,poz[s[x]][i-1],poz[s[x]][i]-1,f),f*=-1;; }
}
int main()
{
freopen("ion.in","r",stdin);
freopen("ion.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) s[i]=read(),poz[s[i]].push_back(i);
for(int i=1;i<=n;i++) val[i]=read(),poz[i].push_back(n+1);
Seg::Init();
for(int i=1;i<=m;i++)
{
que[i].l=read();que[i].r=read();que[i].k=read();
que[i].id=i;
}
sort(que+1,que+1+n,[=](Que a,Que b){return a.l<b.l;});
int now=n;
for(int i=m;i>=1;i--)
{
while(now>=que[i].l) Tr_change(now--);
que[i].res=Seg::query(1,1,n,que[i].l,n,que[i].k);
if(que[i].res>que[i].r) que[i].res=-1;
}
sort(que+1,que+1+n,[=](Que a,Que b){return a.id<b.id;});
for(int i=1;i<=m;i++)
{
printf("%d\n",que[i].res);
}
}

\(T3\)优秀

很巧妙的转化

首先,我们变化的是奇偶性不同的相邻同色两点,我们对奇数层染色之后,就变成了,两颜色不同的两点交换颜色,第一问答案就是,每个子树内部黑白差的绝对值,至于证明的话,我们要求的还是颜色翻转,每个点被交换奇数次

不是很会,待补

5.26 NOI 模拟的更多相关文章

  1. 5.30 NOI 模拟

    $5.30\ NOI $模拟 高三大哥最后一次模拟考了,祝他们好运 \(T1\)装箱游戏 显然可以将四种字母之间的空缺当做状态枚举 那么这道题就很显然了 #include<bits/stdc++ ...

  2. 5.23 NOI 模拟

    $5.23\ NOI $模拟 \(T1\)简单的计算几何题 \(zjr:\)我当时没改,那么自己看题解吧 倒是有个简单的随机化方法(能获得\(72pts,\)正确性未知)\(:\) 随机两条切椭圆的平 ...

  3. 5.6 NOI模拟

    \(5.6\ NOI\)模拟 明天就母亲节了,给家里打了个电话(\(lj\ hsez\)断我电话的电,在宿舍打不了,只能用教练手机打了) 其实我不是很能看到自己的\(future,\)甚至看不到高三的 ...

  4. 5.4 NOI模拟

    \(5.4\ NOI\)模拟 \(T1\) 想到分讨,但是暴力输出一下方案之后有很多特别的情况要讨论,就弃了... 假设\(a\)是原序列,\(b\)是我们得到的序列 设\(i\)是最长公共前缀,\( ...

  5. NOI模拟赛 Day1

    [考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...

  6. 10.26 noip模拟试题

    enc[问题背景]zhx 和他的妹子聊天.[问题描述]考虑一种简单的加密算法.假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映射到另一个字母.例如考虑映射规则:a->b, b- ...

  7. 花海漫步 NOI模拟题

    题目好像难以看懂? 题目大意 给出一个字符串\(S\),统计满足以下条件的\((i,j,p,q)\)的数量. \(i \leq j, p \leq q\) \(S[i..j],S[p..q]\)是回文 ...

  8. NOI 模拟赛 #2

    得分非常惨惨,半个小时写的纯暴力 70 分竟然拿了 rank 1... 如果 OYJason 和 wxjor 在可能会被爆踩吧 嘤 T1 欧拉子图 给一个无向图,如果一个边集的导出子图是一个欧拉回路, ...

  9. 【2018.12.10】NOI模拟赛3

    题目 WZJ题解 大概就是全场就我写不过 $FFT$ 系列吧……自闭 T1 奶一口,下次再写不出这种 $NTT$ 裸题题目我就艹了自己 -_-||| 而且这跟我口胡的自创模拟题 $set1$ 的 $T ...

随机推荐

  1. Unity-UGUI-无限循环列表

    前言:项目准备新增一个竞技场排行榜,策划规定只显示0-400名的玩家.我一想,生成四百个游戏物体,怕不是得把手机给卡死?回想原来在GitHub上看到过一个实现思路就是无限循环列表,所以就想自己试试.公 ...

  2. 大功率超远距离lora无线数传电台,多级中继功能

    一.在无线通信领域,LoRa是目前市场最被看好的技术之一.随着新一代LoRa调制技术的升级,市场对LoRa技术的认知.认可逐步提高,基于LoRa调制技术开发的产品得到更广泛的应用.受益于其超低的接收灵 ...

  3. ESXI系列问题整理以及记录——使用Windows PowerShell中的SSH功能连接ESXI控制台

    首先进入ESXI管理页面,开启ESXI的SSH功能 接下来到位于同一局域网的Win主机上开启Powershell,如果ESXI主机的IP地址为192.168.1.77,则在Powershell中输入: ...

  4. 使用 Abp.Zero 搭建第三方登录模块(一):原理篇

    ​第三方登录是基于用户在第三方平台上(如微信,QQ, 百度)已有的账号来快速完成系统的登录.注册-登录等功能. 微信的鉴权 以微信的鉴权为例: 假如你的网站有一个扫码登录的功能,会弹出一个由微信提供的 ...

  5. 如何修改 node_modules 里的文件

    前言 有时候使用npm上的包,发现有bug,我们知道如何修改,但是别人可能一时半会没法更新,或者是我们特殊需求,别人不愿意修改,这时候我们只能自己动手丰衣足食.那么我们应该如何修改别人的源码呢?首先, ...

  6. JAVA设计模式总结—建造者模式

    建造者模式 模式动机与定义 ​ 首先建造者模式的动机是为了创建复杂对象,简化传统的创建方法,提高创建的效率和可读性. ​ 像图中的这个例子,用户的需求是驾驶一辆汽车,但是对于用户来说是不需要了解汽车装 ...

  7. python做小游戏——做个马里奥分分钟解决

    一.前言 嗨喽,大家好呀!这里是小熊猫 在你的童年记忆里,是否有一个蹦跳.顶蘑菇的小人已经被遗忘? 马里奥是靠吃蘑菇成长,闻名世界的超级巨星.特征是大鼻子.头戴帽子.身穿背带工作服.还留着胡子.帽子加 ...

  8. 在Visual Studio Code 中配置Python 中文乱码问题

    在Visual Studio Code 中配置Python 中文乱码问题 方法一:直接代码修改字符集 添加前四行代码 import io import sys #改变标准输出的默认编码 sys.std ...

  9. SpringCloudAlibaba分布式流量控制组件Sentinel实战与源码分析-中

    实战示例 控制台初体验 Sentinel的控制台启动后,控制台页面的内容数据都是空的,接下来我们来逐步操作演示结合控制台的使用,在上一节也已说明整合SpringCloud Alibaba第一步先加入s ...

  10. NC14585 大吉大利,今晚吃鸡

    NC14585 大吉大利,今晚吃鸡 题目 题目描述 糖和抖m在玩个游戏,规定谁输了就要请谁吃顿大餐:抖m给糖a b c三个驻, 并在a柱上放置了数量为n的圆盘,圆盘的大小从上到下依次增大,现在要做的事 ...