洛谷题目传送门

膜拜神犇出题人管理员!!膜拜yler和ZSY!!

没错yler连续教我这个蒟蒻写起床困难综合症和睡觉困难综合症%%%Orz,所以按位贪心的思路可以继承下来

这里最好还是写树剖吧,不过我根本不会,于是只好来个LCT,用unsigned long long维护链上双向的按位操作。具体方法yler已经讲得很好啦

注意因为信息的维护是有方向性的,所以pushdown要写规范。。。。。。

#include<cstdio>
#define RG register
#define R RG int
#define I inline void
#define TP template<typename T>
#define lc c[x][0]
#define rc c[x][1]
#define G ch=getchar()
#define upd switch(y){\
case 1:v[x]=(B){_0,z};break;\
case 2:v[x]=(B){z,_I};break;\
case 3:v[x]=(B){z,~z};\
}
typedef unsigned long long L;
const L _0=0ull,_1=1ull,_I=~_0;
const int N=100009;
struct B{
L f0,f1;
I merge(RG B x,RG B y){
f0=(~x.f0&y.f0)|(x.f0&y.f1);
f1=(~x.f1&y.f0)|(x.f1&y.f1);
}
}v[N],b[N],e[N];
bool r[N];
int f[N],c[N][2];
TP I swap(RG T&x,RG T&y){
RG T z=x;x=y;y=z;
}
TP I in(RG T&x){
RG char G;
while(ch<'-')G;
x=ch&15;G;
while(ch>'-')x*=10,x+=ch&15,G;
}
inline bool nroot(R x){
return c[f[x]][0]==x||c[f[x]][1]==x;
}
I up(R x){//之前试着写数组发现WA了,原因是本来需要继续运算的信息又被覆盖掉,用结构体弄一下就好了
b[x]=e[x]=v[x];
if(lc)b[x].merge(b[lc],b[x]),e[x].merge(e[x],e[lc]);
if(rc)b[x].merge(b[x],b[rc]),e[x].merge(e[rc],e[x]);
}
I rev(R x){
swap(b[x],e[x]);swap(lc,rc);r[x]^=1;
}
I down(R x){
if(r[x])rev(lc),rev(rc),r[x]=0;
}
I all(R x){
if(nroot(x))all(f[x]);down(x);
}
I rot(R x){
R y=f[x],z=f[y],k=c[y][1]==x,w=c[x][!k];
if(nroot(y))c[z][c[z][1]==y]=x;c[x][!k]=y;c[y][k]=w;
up(f[w]=y);f[y]=x;f[x]=z;
}
I splay(R x){
all(x);R y;
while(nroot(x)){
if(nroot(y=f[x]))
rot((c[f[y]][0]==y)^(c[y][0]==x)?x:y);
rot(x);
}
up(x);
}
I access(R x){
for(R y=0;x;y=x,x=f[x])
splay(x),rc=y,up(x);
}
I mroot(R x){
access(x);splay(x);rev(x);
}
int main(){
R n,m,k,q,x,y;
RG L i,z,g0,g1,w,ans;
in(n);in(m);in(k);--k;
for(x=1;x<=n;++x){
in(y);in(z);upd;up(x);
}
for(i=1;i<n;++i){
in(x);in(y);
mroot(x);f[x]=y;
}
while(m--){
in(q);in(x);in(y);in(z);
if(q&1){
mroot(x);access(y);splay(y);
g0=b[y].f0;g1=b[y].f1;w=ans=_0;
for(i=_1<<k;i;i>>=1)//和起床困难综合症一样贪心下去
if(g0&i)ans|=i;
else if((g1&i)&&(w|i)<=z)ans|=i,w|=i;
printf("%llu\n",ans);
}
else{upd;splay(x);}
}
return 0;
}

洛谷P3613 睡觉困难综合征(LCT,贪心)的更多相关文章

  1. 洛谷P3613 睡觉困难综合征(LCT)

    题目: P3613 睡觉困难综合症 解题思路: LCT,主要是维护链上的多位贪心答案,推个公式:分类讨论入0/1的情况,合并就好了(公式是合并用的) 代码(我不知道之前那个为啥一直wa,改成结构体就好 ...

  2. 【刷题】洛谷 P3613 睡觉困难综合征

    题目背景 刚立完Flag我就挂了WC和THUWC... 时间限制0.5s,空间限制128MB 因为Claris大佬帮助一周目由乃通过了Deus的题,所以一周目的由乃前往二周目世界找雪辉去了 由于二周目 ...

  3. [洛谷]P3613 睡觉困难综合征

    题目大意:给出一棵n个点的树,每个点有一个运算符(与.或.异或)和一个数,支持两种操作,第一种修改一个点的运算符和数,第二种给出x,y,z,询问若有一个0~z之间的数从点x走到点y(简单路径),并且对 ...

  4. 洛谷P3613 睡觉困难综合征

    传送门 题解 人生第一道由乃…… 做这题之前应该先去把这一题给切掉->这里 我的题解->这里 然后先膜一波zsy大佬和flashhu大佬 大体思路就是先吧全0和全1的都跑答案,然后按位贪心 ...

  5. P3613 睡觉困难综合征 LCT+贪心+位运算

    \(\color{#0066ff}{ 题目描述 }\) 由乃这个问题越想越迷糊,已经达到了废寝忘食的地步.结果她发现--晚上睡不着了!只能把自己的一个神经元(我们可以抽象成一个树形结构)拿出来,交给D ...

  6. 洛谷3613睡觉困难综合征(LCT维护链信息(前后缀)+贪心)

    这个题目还是很好啊QWQ很有纪念意义 首先,如果在序列上且是单次询问的话,就是一个非常裸的贪心了QWQ这也是NOI当时原题的问题和数据范围 我们考虑上树的话,应该怎么做? 我的想法是,对于每一位建一个 ...

  7. [洛谷P3613]睡觉困难综合症

    写码30min,调码3h的题.. 好在最后查出来了 , , n, x, y, z); 改成了 , , n, mark[x], y, z); 然后$40\rightarrow 100$ #include ...

  8. [bzoj3668][Noi2014]起床困难综合症/[洛谷3613]睡觉困难综合症

    来自FallDream的博客,未经允许,请勿转载,谢谢. 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综 ...

  9. P3613 睡觉困难综合征(LCT + 位运算)

    题意 NOI2014 起床困难综合症 放在树上,加上单点修改与链上查询. 题解 类似于原题,我们只需要求出 \(0\) 和 \(2^{k - 1} - 1\) 走过这条链会变成什么值,就能确定每一位为 ...

随机推荐

  1. form表单,submit,ajax提交

    尼玛... 一个简单的表单提交,竟然给我整的直郁闷. 本来就是个保存功能,几个前人都用的ajax提交,我也就没改成submit.然后坑爹的就来了. 我在表单里写了个<form></f ...

  2. 9.Libraries and visibility 库和可见性

    import和liabrary指令可以帮助你创建模块化,可复用的代码.库不仅仅提供API,也是一个私有化单元:库中已下划线(_)开头的类都是对外不可访问的.每个Dart的应用也是一个包,尽管它没有使用 ...

  3. 利用备份技术获取apk本地存储数据

    即使设备没有root,我们也可以通过物理访问设备来获取应用程序的数据,我们还可以通过此方法改变一个应用程序的数据.如果一个应用程序将数据存储在客户端, 使用简单的密码或pin检查,攻击者有可能使用这种 ...

  4. 20155202张旭《网络对抗技术》 week1 PC平台逆向破解及Bof基础实践

    20155202张旭<网络对抗技术> week1 PC平台逆向破解及Bof基础实践 1.实践目标: 实践对象:一个名为pwn1的linux可执行文件. 该程序正常执行流程是: main调用 ...

  5. P2371 [国家集训队]墨墨的等式

    膜意义下最短路. 把最小的\(a\)抠出来,作为模数\(mod\),然后建点编号为\(0\)到\(mod-1\),对每个数\(a\)连边\((i,(a+i)\mod mod)\)点\(i\)的最短路就 ...

  6. idea 项目java版本选项位置

    藏这里了 还有一个

  7. Android中级教程之----Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)

    在Android群里,经常会有人问我,Android Log是怎么用的,今天我就把从网上以及SDK里东拼西凑过来,让大家先一睹为快,希望对大家入门Android Log有一定的帮助. android. ...

  8. Jmeter(十九)_ForEach控制器实现网页爬虫

    一直以来,爬虫似乎都是写代码去实现的,今天像大家介绍一下Jmeter如何实现一个网页爬虫! 龙渊阁测试开发家园 317765580 Jmeter的爬虫原理其实很简单,就是对网页提交一个请求,然后把返回 ...

  9. LintCode——旋转字符串

    描述:给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 样例:对于字符串 "abcdefg"     offset=0 => "abcdefg&qu ...

  10. Windows7下Java运行时环境搭建

    第一步:下载JDK 地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html,(由于Sun于2009年被oracle收 ...