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, 每天进步一点点的目标,贵在坚持 前端时间有 ...
随机推荐
- 【转】Java并发编程:并发容器之ConcurrentHashMap
JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了 ...
- 【转】C++标准转换运算符static_cast
static_cast<new_type> (expression) 虽然const_cast是用来去除变量的const限定,但是static_cast却不是用来去除变量的static引用 ...
- 2018 Multi-University Training Contest - Team 1 题解
Solved A HDU 6298 Maximum Multiple Solved B HDU 6299 Balanced Sequence Solved C HDU 6300 Triangle Pa ...
- ORACLE IMPDP导入报表数据已存在
背景 搞了这么多年oracle,不论是开发和运维,自认为是都了解了,和dba差的只是熟练的问题,因为毕竟不是天天搞它.不过突然听说数据泵导入的功能,大吃一惊,好像有印象,以为是落后的,一查,竟然是先进 ...
- atoi 和 itoa的实现
atoi 和 itoa是面试笔试经常要考到的题目,下面两份代码是用C语言实现的atoi和itoa: 1, atoi 原型: int atoi(const char *nptr); 函数说明: 参数np ...
- C++编程题
1.不用系统提供的字符串转int的功能,将一个字符串转换为对应的值 #include <iostream> using namespace std; static int StringTo ...
- python中__init__ ,__del__ &__new__
__new__ __new__方法是用来创建对象,__new__方法需要有一个返回值,这个返回值表示创建出来的对象的引用 __init__ __init__方法在类的一个对象被建立时 ,马上执行.__ ...
- Laravel 5.2数据库--多个关联关系,带条件约束的渴求式加载的问题
### 今天在连表获取数据的时候,老是获取不到想要的,确实有点无力适从的感觉. 归根到底,还是对laravel不够熟悉,至少是数据库操作那块. ### 问题是这样的: 我想要通过连表中间表,拿中间表的 ...
- hbase搭建
0. 软件版本下载 http://mirror.bit.edu.cn/apache/hbase/ 1. 集群环境 Master 172.16.11.97 Slave1 172.16.11.98 S ...
- maven项目使用log4j
日志是应用软件中不可缺少的部分,Apache的开源项目 log4j 是一个功能强大的日志组件,提供方便的日志记录. 1.maven项目在pom.xml导入log4j依赖: <dependency ...