题解:

比较简单的一道题

线段树+线性基

显然离线处理出位置

然后线段树updata的时候暴力合并线性基

nlogn^3

一个常数优化就是线性基已满就直接返回这个线性基

还有个优化是用快速找到第一个1的函数

代码:

#include <bits/stdc++.h>
using namespace std;
#define rint register ll
#define IL inline
#define me(x) memset(x,0,sizeof(x))
#define rep(i,h,t) for (rint i=h;i<=t;i++)
#define dep(i,t,h) for (rint i=t;i>=h;i--)
ll n,m,num;
const ll N=12e4;
char ss[<<],*A=ss,*B=ss;
IL char gc()
{
return A==B&&(B=(A=ss)+fread(ss,,<<,stdin),A==B)?EOF:*A++;
}
template<class T> void IL read(T &x)
{
rint f=,c; while (c=gc(),c<||c>) if (c=='-') f=-; x=(c^);
while (c=gc(),c>&&c<) x=(x<<)+(x<<)+(c^); x*=f;
}
struct re{
ll a,b,c;
}a[N];
ll cnt[N],sum[N];
vector<ll> ve;
struct sgt{
#define mid ((h+t)/2)
ll f[N*][];
IL void cr(ll *c,ll k)
{
dep(i,,)
{
if (!k) return;
if (k&(<<(i-)))
{
if (!c[i])
{
c[i]=k; return;
} else k^=c[i];
}
}
}
struct re2{
ll a[];
re2 ()
{
memset(a,,sizeof(a));
}
};
IL re2 hb(ll *x,ll *y)
{
ll cnt1=,cnt2=;
rep(i,,) if (x[i]) cnt1++;
rep(i,,) if (y[i]) cnt2++;
re2 now;
if(cnt1==)
{
rep(i,,) now.a[i]=x[i];
return(now);
}
if (cnt2==)
{
rep(i,,) now.a[i]=y[i];
return(now);
}
if (cnt1<cnt2)
{
rep(i,,) now.a[i]=y[i];
rep(i,,)
if (x[i]) cr(now.a,x[i]);
} else
{
rep(i,,) now.a[i]=x[i];
rep(i,,)
if (y[i]) cr(now.a,y[i]);
}
return(now);
}
IL void updata(ll x)
{
re2 now=hb(f[x*],f[x*+]);
rep(i,,) f[x][i]=now.a[i];
}
void query(ll x,ll h,ll t,ll h1,ll t1)
{
if (h1<=h&&t<=t1)
{
ve.push_back(x);
return;
}
if (h1<=mid) query(x*,h,mid,h1,t1);
if (mid<t1) query(x*+,mid+,t,h1,t1);
}
void change(ll x,ll h,ll t,ll pos,ll k)
{
if (h==t)
{
cr(f[x],k);
return;
}
if (pos<=mid) change(x*,h,mid,pos,k);
else change(x*+,mid+,t,pos,k);
updata(x);
}
IL ll query2()
{
re2 now;
for(ll i=;i<ve.size();i++)
now=hb(now.a,f[ve[i]]);
ll ans=;
for(ll i=;i>=;i--)
if (now.a[i]&&!(ans&(<<(i-)))) ans^=now.a[i];
return ans;
}
}S;
ll main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
read(m); read(n);
rep(i,,m)
{
ll k,x,y;
read(k); read(x); read(y);
a[i].a=k; a[i].b=x; a[i].c=y;
if (k==) cnt[x]++;
}
rep(i,,n) cnt[i]+=cnt[i-];
num=cnt[n];
rep(i,,m)
{
ll k=a[i].a,x=a[i].b,y=a[i].c;
if (k==)
{
sum[x]++;
S.change(,,num,cnt[x-]+sum[x],y);
} else
{
ve.clear();
if (cnt[x-]+<=cnt[y])
{
S.query(,,num,cnt[x-]+,cnt[y]);
cout<<S.query2()<<endl;
} else cout<<<<endl;
}
}
return ;
}

T37302 P哥的桶的更多相关文章

  1. P哥的桶(线段树+线性基)

    https://www.luogu.org/problem/P4839 题目: 有两个操作 1 a b  在a的位置添加b数值  (注意一个位置可以有多个值) 2 a b : 在 a到b的范围任取任意 ...

  2. 【校内test】桶哥的问题

    (以上题目出自_rqy两年前) #A:桶哥的问题——买桶[链接] [题目描述] 桶哥要买一些全家桶.他有a元钱,而每个桶要花b元钱.他能不能买到c个桶? [输入格式] 一行三个整数a, b, c [输 ...

  3. 校内题目T2695 桶哥的问题——吃桶

    同T2一样外校蒟蒻可能没看过: 题目描述: 题目背景 @桶哥 桶哥的桶没有送完. 题目描述 桶哥的桶没有送完,他还有n个桶.他决定把这些桶吃掉.他的每一个桶两个属性:种类aia_iai​和美味值bib ...

  4. [CQOI2018]交错序列 (矩阵快速幂,数论)

    [CQOI2018]交错序列 \(solution:\) 这一题出得真的很好,将原本一道矩阵快速幂硬生生加入组合数的标签,还那么没有违和感,那么让人看不出来.所以做这道题必须先知道(矩阵快速幂及如何构 ...

  5. T2695 桶哥的问题——吃桶

    ~~~~~我~是~真的~忍不了~这个~取模~的~锅~了~~~~~ T2695 桶哥的问题——吃桶 前传 1.T2686 桶哥的问题——买桶 这题真的hin简单,真的 2.T2691 桶哥的问题——送桶 ...

  6. 校内题目T2691 桶哥的问题——送桶

    这是一道校内题目,但迷路的蒟蒻们同样被欢迎来此学习QWQ 题目描述: 题目背景 @桶哥本校——皎月pks大佬OrzOrz 买完了桶,桶哥要去送桶. 题目描述 桶哥买了nn个桶, 他要将这些桶送去nn个 ...

  7. 【洛谷T2695 桶哥的问题——吃桶】

    这是我们团队的一个题目(就是一个_rqy说很好写的题QwQ) 题目背景 @桶哥 这个题目的思路很玄学(性感_rqy在线讲解) 60 Pts 对于前面的六十分,好像很好拿,单纯的打一个模拟 唯一需要注意 ...

  8. 【桶哥的问题——吃桶-简化版】【洛谷p2671】求和

    求和=>[链接] 题目相较起_rqy出的要简单很多,来自noip普及组2015 化简这个式子:x+z=2y,故x与z mod 2同余,因此和桶哥的问题——吃桶一样的思路就可以做出来啦qwq: # ...

  9. 老哥你能写篇 SpringCloud Alibaba 全家桶吗? 看视频太累 太枯燥了 !

    最喜欢的一句话: 1.01的365次方=37.78343433289 >>>1 0.99的365次方= 0.02551796445229, 每天进步一点点的目标,贵在坚持 前端时间有 ...

随机推荐

  1. oracle 12514文件解决

    listener.ora的SID_LIST_LISTENER添加一下内容 (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = f:\app\Admini ...

  2. bootstrap4简单使用和入门02-bootstrap的js组件简单使用

    自带默认的css和js弹框控制 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  3. python操作三大主流数据库(5)python操作mysql⑤使用Jinja2模板提取优化页面展示

    python操作mysql⑤使用Jinja2模板提取优化页面展示 在templates目录下的index.html.cat.html等页面有一些共同的元素,代码比较冗余可以使用模板提取公共代码,在各网 ...

  4. linux中shell变量$#,$@,$0,$1,$2的含义解释 (转载)

    变量说明: $$Shell本身的PID(ProcessID)$!Shell最后运行的后台Process的PID$?最后运行的命令的结束代码(返回值)$-使用Set命令设定的Flag一览$*所有参数列表 ...

  5. 【原创】大数据基础之Flume(2)Sink代码解析

    flume sink核心类结构 1 核心接口Sink org.apache.flume.Sink /** * <p>Requests the sink to attempt to cons ...

  6. awk简单用法-(1)

    一.awk基本操作 awk指定多个分割符,分隔符中有:和空格,还有:和空格的组合,这个时候需要指定多个分隔符 -F'[ :]+',[ :]表示分隔符为:和空格,一个或者多个+号表示空格和:的组合也为一 ...

  7. 13)django-ORM(连表一对多,外键创建,创建数据,3种查询)

    一对多需要使用外键 一:外键创建ForeignKey b=models.ForeignKey(to="Business",to_field=("id"))#dj ...

  8. centos7 nginx图片 服务器可以访问ftp用户上传的图片资源的配置

    注:本文参考了csdn:JAVA_DIRECTION的<nginx和ftp搭建图片服务器>一文.在实践中其文在centos7中还是存在缺陷性的 一:前提条件:是成功的安装好了ftp服务器和 ...

  9. centos7_ linux : Nginx安装手册

    一: nginx安装环境 1: oracle vm虚拟机+Centos7系统的yum环境的安装 配置本地yum库(用root用户操作) 创建挂载目录 mkdir /mnt/cdrom 查看挂载目录 l ...

  10. 【shell】两种字符串提取场景的实现

    shell虽然比batch顺眼点儿,但还是老话,入门容易,精通难. 1.场景一是这样的,现有字符串的内容 name: tiger; age:18; location:china; 需求:提取每个属性的 ...