• Codeforces 620E New Year Tree
    • Codeforces 121E Lucky Array
    • Codeforces 633H Fibonacci-ish II
  • 我来安利一道题.

Codeforces 620E New Year Tree

给一棵树,每个点有个颜色,支持对子树进行覆盖,询问子树中含有多少种不同颜色.颜色最多60种.
如果没有修改操作,可以使用莫队,但是这里有修改操作,不能使用莫队.
那么还剩下颜色最多60种这个突破口.
由于相同的颜色只计算一次,自然地想到用一个二进制整数存储有多少种颜色,询问时直接用ororor运算计算,求出算出的数中111的个数就可以了.
因为只有子树操作,不需要树链剖分.
还有一点要注意的,计算的时候要用1ll<<x,count_bit的时候要用__builtin_popcountll函数.
这里我手写了.

#include<bits/stdc++.h> //Ithea Myse Valgulious
namespace chtholly{
typedef long long ll;
#define re0 register int
#define rec register char
#define rel register ll
#define gc getchar
#define pc putchar
#define p32 pc(' ')
#define pl puts("")
/*By Citrus*/
inline int read(){re0 x=0,f=1;rec c=gc();for (;!isdigit(c);c=gc()) f^=c=='-';for (;isdigit(c);c=gc()) x=(x<<3)+(x<<1)+(c^'0');return f?x:-x;}
inline void read(rel &x){x=0;re0 f=1;rec c=gc();for (;!isdigit(c);c=gc()) f^=c=='-';for (;isdigit(c);c=gc()) x=(x<<3)+(x<<1)+(c^'0');x=f?x:-x;}
template <typename mitsuha>
inline int write(mitsuha x){if (!x) return pc(48);if (x<0) x=-x,pc('-');re0 bit[20],i,p=0;for (;x;x/=10) bit[++p]=x%10;for (i=p;i;--i) pc(bit[i]+48);}
inline char fuhao(){rec c=gc();for (;isspace(c);c=gc());return c;}
}using namespace chtholly;
using namespace std;
const int yuzu=4e5;
typedef int fuko[yuzu|10];
vector<int> lj[yuzu|10];
int n,m,cnt;
fuko dfn,edf,ord,a;void dfs(int u,int fa){
dfn[u]=++cnt,ord[cnt]=u;
for (int v:lj[u]) if (v^fa) dfs(v,u);
edf[u]=cnt;
}typedef ll karen[yuzu<<2|13];
struct segtree{
#define le rt<<1
#define ri le|1
#define ls le,l,mid
#define rs ri,mid+1,r
karen val,lazy;
void build(int rt=1,int l=1,int r=n){lazy[rt]=-1;if (l==r) val[rt]=1ll<<a[ord[l]];else{int mid=l+r>>1;build(ls),build(rs);val[rt]=val[le]|val[ri];}}
void push_down(int rt){if (~lazy[rt]){lazy[le]=lazy[ri]=lazy[rt];val[le]=val[ri]=1ll<<lazy[rt];lazy[rt]=-1;}}
void update(int ql,int qr,int v,int rt=1,int l=1,int r=n){if (ql>r||qr<l) return;if (ql<=l&&qr>=r){val[rt]=1ll<<v-1;lazy[rt]=v-1;}else{int mid=l+r>>1;push_down(rt);update(ql,qr,v,ls),update(ql,qr,v,rs);val[rt]=val[le]|val[ri];}}
ll query(int ql,int qr,int rt=1,int l=1,int r=n){if (ql>r||qr<l) return 0;if (ql<=l&&qr>=r) return val[rt];int mid=l+r>>1;push_down(rt);return query(ql,qr,ls)|query(ql,qr,rs);}
}my_;#define all(u) dfn[u],edf[u]
int _bp(ll x){
int ans=0;
for (;x;x&=x-1) ++ans;
return ans;
}int main(){
re0 i;
n=read(),m=read();
for (i=1;i<=n;++i) a[i]=read()-1;
for (i=1;i<n;++i){int u=read(),v=read();lj[u].push_back(v);lj[v].push_back(u);}
dfs(1,0),my_.build();
for (;m--;){int op=read(),u=read();if (op==1){ my_.update(all(u),read());}else{write(_bp(my_.query(all(u)))),pl;}}
}

Codeforces 121E Lucky Array

定义幸运数字为只含有4和7的数字,给出一个序列,支持区间加,求区间内有多少个幸运数字.
这题一想好像不能使用线段树或者树状数组,否则一定会退化成单点修改.
我尝试用暴力卡常去跑,在第62个点T了,我怎么都救不了.
那咱们没有办法了,就真的用树状数组单点修改去信仰了.
结果过了.div1.E还有这样的题,真的是一道神题啊.
所有数不超过10000" role="presentation" style="position: relative;">100001000010000,我们先用dfsdfsdfs求出所有幸运数字,放在一个数组里,可以O(1)O(1)O(1)判断一个数是不是幸运数字.接下来用树状数组瞎跑就可以过了.

/*当然不加卡常头文件,不用float也是可以过的.*/
#pragma GCC optimize("Ofast,no-stack-protector,Ofast")
#pragma GCC target("avx,sse2")
#include<bits/stdc++.h> //Ithea Myse Valgulious
namespace chtholly{
typedef long long ll;
#define re0 register int
#define rec register char
#define rel register ll
#define gc getchar
#define pc putchar
#define p32 pc(' ')
#define pl puts("")
/*By Citrus*/
inline int read(){int x=0,f=1;char c=gc();for (;!isdigit(c);c=gc()) f^=c=='-';for (;isdigit(c);c=gc()) x=(x<<3)+(x<<1)+(c^'0');return f?x:-x;}
inline void read(rel &x){x=0;int f=1;char c=gc();for (;!isdigit(c);c=gc()) f^=c=='-';for (;isdigit(c);c=gc()) x=(x<<3)+(x<<1)+(c^'0');x=f?x:-x;}
template <typename mitsuha>
inline int write(mitsuha x){if (!x) return pc(48);if (x<0) x=-x,pc('-');re0 bit[20],i,p=0;for (;x;x/=10) bit[++p]=x%10;for (i=p;i;--i) pc(bit[i]+48);}
inline char fuhao(){rec c=gc();for (;isspace(c);c=gc());return c;}
}using namespace chtholly;
using namespace std;
const int yuzu=1e5;
int n=read(),m=read();
typedef int fuko[yuzu|10];
fuko lnum,a;void dfs(int k,int num){
if (!k) return;
lnum[num]=1;
dfs(k-1,num*10+4);
dfs(k-1,num*10+7);
}struct _bit{
fuko c;
#define lowbit(x) (x&-x)
void add(int x,int k){for (;x<=n;x+=lowbit(x)) c[x]+=k;}
int query(int x){int s=0;for (;x;x-=lowbit(x)) s+=c[x];return s;}
}my_;int main(){
re0 i;
dfs(5,0);
for (i=1;i<=n;++i){if (lnum[a[i]=read()]) my_.add(i,1);}
for (;m--;){char op=fuhao();float l=read(),r=read();if (op=='a'){float k;scanf("%f",&k);for (i=l;i<=r;++i){if (lnum[a[i]]) my_.add(i,-1);if (lnum[a[i]+=k]) my_.add(i,1);}}else{write(my_.query(r)-my_.query(l-1)),pl;}}
}

Codeforces 633H Fibonacci-ish II

q个询问,每次询问[l,r]区间排序去重后F(a[l to r])%m 的值.
F(x)指第x个斐波那契数.

标算是线段树维护莫队,O(n*logn*sqrt(n)),常数非常大.
因此用O(n^2)暴力爆过去,个别常数较大的标算有时不一定能够跑得比暴力快.

#include<bits/stdc++.h> //Ithea Myse Valgulious
namespace chtholly{
typedef long long ll;
#define re0 register int
#define rec register char
#define rel register ll
#define gc getchar
#define pc putchar
#define p32 pc(' ')
#define pl puts("")
/*By Citrus*/
inline int read(){int x=0,f=1;char c=gc();for (;!isdigit(c);c=gc()) f^=c=='-';for (;isdigit(c);c=gc()) x=(x<<3)+(x<<1)+(c^'0');return f?x:-x;}
template <typename mitsuha>
inline bool read(mitsuha &x){x=0;int f=1;char c=gc();for (;!isdigit(c)&&~c;c=gc()) f^=c=='-';if (!~c) return 0;for (;isdigit(c);c=gc()) x=(x<<3)+(x<<1)+(c^'0');return x=f?x:-x,1;}
template <typename mitsuha>
inline int write(mitsuha x){if (!x) return pc(48);if (x<0) x=-x,pc('-');int bit[20],i,p=0;for (;x;x/=10) bit[++p]=x%10;for (i=p;i;--i) pc(bit[i]+48);}
inline char fuhao(){char c=gc();for (;isspace(c);c=gc());return c;}
}using namespace chtholly;
using namespace std;
#define yi first
#define er second
typedef pair<int,int> pii;
const int yuzu=3e4;
typedef int fuko[yuzu|10];
fuko ans,step,fib={1,1},l,r,last;
int n=read(),m=read();
pii a[yuzu|10];int main(){
int i,j;
for (i=1;i<=n;++i) a[i]=pii(read(),i);
sort(a+1,a+n+1);
memset(last,-1,sizeof last);
for (i=2;i<=n;++i) fib[i]=(fib[i-1]+fib[i-2])%m;
int q=read();
for (i=1;i<=q;++i) l[i]=read(),r[i]=read();
for (i=1;i<=n;++i){int d=a[i].yi%m;for (j=1;j<=q;++j){if (a[i].er>=l[j]&&a[i].er<=r[j]&&a[i].yi^last[j]){ans[j]=(ans[j]+fib[step[j]++]*d)%m;last[j]=a[i].yi;}  }}
for (i=1;i<=q;++i) write(ans[i]),pl;
}

谢谢大家.

我来安利一道题.

这题是Codeforces620E的升级版,需要树链剖分来解决.
洛谷 U24602 沙耶之歌(沙耶の唄)

Codeforces上几道神一般的数据结构题相关推荐

  1. Codeforces上几个非常妙的数据结构题

    Codeforces 833B The Bakery Codeforces 633H Fibonacci-ish II Codeforces 522D Closest Equals Codeforce ...

  2. Codeforces上通过数超过5W人的题

    Codeforces上通过数超过5W人的题 共32题:1000分4题,800分28题. 编号 题号 题名 分数 通过数 1 4A Watermelon 800 x193501 2 71A Way To ...

  3. 【在Centos系统上搭建原神服务器2.8题】

    在Centos系统上搭建原神服务器2.8 警告! 本文章及系列教程仅供个人技术研究使用,禁止向任何人提供私人游戏服务器服务 我为什么会分享出来,因为有人利用免费开源项目进行收费 不仅如此还有进服的二次 ...

  4. 怎么获取codeforces的数据_原创 | codeforces 1417C,逆向思考的数据结构题

    点击上方蓝字,关注并星标,和我一起学技术. 大家好,欢迎阅读周末算法题专题. 今天我们选择的是codeforces contest 1417的C题k-Amazing Numbers.这是一道经典的数据 ...

  5. 力扣K神图解算法数据结构解析10

    力扣K神图解算法数据结构点这里 十.分治算法 剑指07,重建二叉树 //时间O(n),空间O(n) //自己一直觉得这道题很难,没想到还是能够拿下,其实理论也清楚,前序遍历和中序遍历 //关键如下 / ...

  6. 互联网扫地僧精心总结,39W字上千道Java一线大厂面试题手册

    今天给大家总结出一份500页超39w字的一线大厂Java面试题,来自一位不愿意透露姓名的大厂扫地僧. "扫地僧,是金庸武侠小说<天龙八部>中的人物,一位在少林寺负责打扫藏经阁的无 ...

  7. 拥有超级智能后,人工智能会变成神一般的偏执狂吗?

    全文共3651字,预计学习时长11分钟 图源:Unsplash 以人工智能.自动化等为代表的技术能让你的生活更加智能与神奇.国内首个人工智能公园(百度联合)--海淀公园.你在里面跑路,人工智能帮你测量 ...

  8. 力扣K神图解算法数据结构解析04

    力扣K神图解算法数据结构点这里 四.搜索与回溯算法 DFS,本质是递归 递推参数 终止条件 递推工作 回溯 BFS,本质是队列 queue<int> que; que.push(第一个参数 ...

  9. NAS不够快?那就上SSD享受如火箭般的体验吧!

    NAS不够快?那就上SSD享受如火箭般的体验吧! HDD还是SSD? 如果你的NAS支持使用SSD固态硬盘,你会选择 全HDD还是 全SSD? 「机械硬盘HDD」和「固态硬盘SSD」各有优缺点 SSD ...

最新文章

  1. Windows10快捷应用指令
  2. 基于java多线程来实现生产者和消费者的实例
  3. [html] 回车表单自动跳转如何禁止
  4. python多项分式求和计算_python实现利用留数定理分解分式多项式
  5. SpringBoot整合RocketMQ之环境搭建以及Producer发送消息
  6. 有一个工程师男(女)朋友是什么样的体验?
  7. 借助拳王虚拟项目公社,自动发货系统,卖虚拟教程产品,实现全自动化赚钱的秘密
  8. php连接mysql原生_php链接mysql原生写法
  9. 论文中的一些数学符号表示
  10. uBLAS——Boost 线性代数基础程序库 (三)
  11. 纯干货,用好PPT中的异形,提高页面的设计感,建议收藏!
  12. 交安ABC考试单选练习题库
  13. 如何下载邯郸市卫星地图高清版大图
  14. IJCAI-18 阿里妈妈搜索广告转化预测 Top2%思路
  15. springboot+老年康复中心信息管理系统 毕业设计-附源码250859
  16. java下载excel(excel含有多张网络图片)
  17. 使用u盘安装Fedora14
  18. 辽宁大学计算机测控技术专业排名,测控技术与仪器专业大学排名
  19. python项目管理工具_项目管理工具之Trac
  20. Android安全 Hook技术,AndroidHook技术分析.pdf-北京理工大学信息系统及安全对抗实验中心.PDF...

热门文章

  1. Linux下安装Oracle11G详细过程
  2. matlab实现rte接口_MATLAB®和Simulink®
  3. 下载k8s.gcr.io仓库的镜像的两个方式
  4. 页眉从第三页开始设置起?标题前面有小黑点?目录对齐有问题?mathtype编辑公式太麻烦?
  5. 像素游戏素材网站记录
  6. 论文阅读——S. Lee, et al., Beyond Natural Motion: Exploring Discontinuity for Video Frame Interpolation
  7. 【SpringBoot高级篇】SpringBoot集成jasypt 配置脱敏和数据脱敏
  8. dede集成环境服务器网站设置,Dede织梦CMS服务器环境安全设置
  9. 二分法求方程的根(Python)
  10. 看杜拉拉升职记的一些体会