T37302 P哥的桶
题解:
比较简单的一道题
线段树+线性基
显然离线处理出位置
然后线段树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哥的桶的更多相关文章
- P哥的桶(线段树+线性基)
https://www.luogu.org/problem/P4839 题目: 有两个操作 1 a b 在a的位置添加b数值 (注意一个位置可以有多个值) 2 a b : 在 a到b的范围任取任意 ...
- 【校内test】桶哥的问题
(以上题目出自_rqy两年前) #A:桶哥的问题——买桶[链接] [题目描述] 桶哥要买一些全家桶.他有a元钱,而每个桶要花b元钱.他能不能买到c个桶? [输入格式] 一行三个整数a, b, c [输 ...
- 校内题目T2695 桶哥的问题——吃桶
同T2一样外校蒟蒻可能没看过: 题目描述: 题目背景 @桶哥 桶哥的桶没有送完. 题目描述 桶哥的桶没有送完,他还有n个桶.他决定把这些桶吃掉.他的每一个桶两个属性:种类aia_iai和美味值bib ...
- [CQOI2018]交错序列 (矩阵快速幂,数论)
[CQOI2018]交错序列 \(solution:\) 这一题出得真的很好,将原本一道矩阵快速幂硬生生加入组合数的标签,还那么没有违和感,那么让人看不出来.所以做这道题必须先知道(矩阵快速幂及如何构 ...
- T2695 桶哥的问题——吃桶
~~~~~我~是~真的~忍不了~这个~取模~的~锅~了~~~~~ T2695 桶哥的问题——吃桶 前传 1.T2686 桶哥的问题——买桶 这题真的hin简单,真的 2.T2691 桶哥的问题——送桶 ...
- 校内题目T2691 桶哥的问题——送桶
这是一道校内题目,但迷路的蒟蒻们同样被欢迎来此学习QWQ 题目描述: 题目背景 @桶哥本校——皎月pks大佬OrzOrz 买完了桶,桶哥要去送桶. 题目描述 桶哥买了nn个桶, 他要将这些桶送去nn个 ...
- 【洛谷T2695 桶哥的问题——吃桶】
这是我们团队的一个题目(就是一个_rqy说很好写的题QwQ) 题目背景 @桶哥 这个题目的思路很玄学(性感_rqy在线讲解) 60 Pts 对于前面的六十分,好像很好拿,单纯的打一个模拟 唯一需要注意 ...
- 【桶哥的问题——吃桶-简化版】【洛谷p2671】求和
求和=>[链接] 题目相较起_rqy出的要简单很多,来自noip普及组2015 化简这个式子:x+z=2y,故x与z mod 2同余,因此和桶哥的问题——吃桶一样的思路就可以做出来啦qwq: # ...
- 老哥你能写篇 SpringCloud Alibaba 全家桶吗? 看视频太累 太枯燥了 !
最喜欢的一句话: 1.01的365次方=37.78343433289 >>>1 0.99的365次方= 0.02551796445229, 每天进步一点点的目标,贵在坚持 前端时间有 ...
随机推荐
- 词向量之Word2vector原理浅析
原文地址:https://www.jianshu.com/p/b2da4d94a122 一.概述 本文主要是从deep learning for nlp课程的讲义中学习.总结google word2v ...
- zabbix在运维方面的监控方法小结
一些经典的运维问题: .配置文件中有空格,导致服务端下发的域名出现问题 .修改数据库没有备份 .修改dnspod问题,指向了错误的IP地址 .时间不一致,需要重新设定时区 .启动程序必须是最新版本,如 ...
- bootstrapValidator使用总结
1.根据条件动态增删检查条件 参考文章:https://blog.csdn.net/sxlzs_/article/details/78211928 #去除某字段的验证 $("#formRes ...
- 【原创】测试基础之http_load(1)简介、安装、使用
http_load-09Mar2016官方:https://acme.com/software/http_load/ 一 简介 http_load - multiprocessing http tes ...
- 【原创】运维基础之OpenResty
openresty 1.15.8.1 官方:https://openresty.org/en/ 一 简介 OpenResty® is a dynamic web platform based on N ...
- Python 三种过滤去重方法
SET集合去重 set(1,1,2) REDIS去重 布隆过滤器
- The servlet name already exists.解决方法
The servlet name already exists.解决方法 当我们建立过同名的servlet文件,然后又将其删掉后再用同类名字建一个servlet时就会报错.解决办法:web.xml里面 ...
- Confluence 6 审查日志
日志审查能够允许管理查看你 Confluence 站点所做的修改.这个在你希望对你的 Confluence 进行问题查看或者是你希望对你 Confluence 保留重要的修改事件,例如修改了全局权限. ...
- Confluence 6 浏览默认的 Decorators
在任何时候,你都可以使用 "Site Layouts" 页面中的 "View Default" 来浏览默认的 decorator 文件.模板浏览器允许你查看使用 ...
- selenium+python之 辨识alert、window以及操作
1.分辨 首先区别下alert.window和伪装对话框: alert,浏览器弹出框,一般是用来确认某些操作.输入简单的text或用户名.密码等,根据浏览器的不同,弹出框的样式也不一样,不过都是很简单 ...