\(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. MySQL(8) - MySQL的事务机制

    MySQL数据库的事务机制 1.1.事务的概念和特性 1.2.事务的隔离级别 repeatable read是mysql默认的事务隔离级别 #事务A #事务A,临时修改工资,未commit, STAR ...

  2. MMDeploy安装笔记

    MMDeploy的TensorRT教程 Step1: 创建虚拟环境并且安装MMDetection conda create -n openmmlab python=3.7 -y conda activ ...

  3. 04C++核心编程(二-泛型编程)

    Day08 笔记 1 函数模板 1.1 泛型编程 – 模板技术 特点:类型参数化 1.2 template< typename T > 告诉编译器后面紧跟着的函数或者类中出现T,不要报错, ...

  4. axios的请求参数格式(get、post、put、delete)

    1.get请求方式: axios.get(url[, config]) // [字符拼接型]axios.get(url?id=123&status=0') // 等同于 axios.get(u ...

  5. Kafka到底有多高可靠?(RNG NB)

    在聊Kafka高可靠之前,先在评论区来波RNG NB好不好! 什么叫可靠性? 大家都知道,系统架构有三高:「高性能.高并发和高可用」,三者的重要性不言而喻. 对于任意系统,想要同时满足三高都是一件非常 ...

  6. rpc的正确打开方式|读懂Go原生net/rpc包

    前言 最近在阅读字节跳动开源RPC框架Kitex的源码,分析了如何借助命令行,由一个IDL文件,生成client和server的脚手架代码,也分析了Kitex的日志组件klog.当然Kitex还有许多 ...

  7. 什么是Gerber文件?PCB电路板Gerber文件简介

    什么是Gerber文件: Gerber也叫"光绘",通常只代表一种格式如RS-274, 274D, 274X等,充任了将设计的图形数据转换成PCB制造的两头媒介,即一种CAD-CA ...

  8. 探索链路追踪在.NET6工业物联网项目的应用

    ExploringIoTDistributedTracingNet6 如果觉得有用,请留言学到了. 已经会了的老哥,请留言就这? 可能遇到的问题 工业物联网项目自上而下一般分为ERP.Mes.SCAD ...

  9. 拒绝蛮力,高效查看Linux日志文件!

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 日常分析问题时,会频繁地查看分析日志,但如果蛮力去查看日志,耗时费力还不一定有效果,因此我总结了在Linux常用的 ...

  10. 揭开Vue异步组件的神秘面纱

    简介 在大型应用里,有些组件可能一开始并不显示,只有在特定条件下才会渲染,那么这种情况下该组件的资源其实不需要一开始就加载,完全可以在需要的时候再去请求,这也可以减少页面首次加载的资源体积,要在Vue ...