Codeforces Round #442 (Div. 2) Danil and a Part-time Job
http://codeforces.com/contest/877/problem/E
真的菜的不行,自己敲一个模板,到处都是问题。哎
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5+;
#define lson (q<<1)
#define rson ((q<<1)|1)
struct node
{
int l,r,mid;
int v,lazy;
}tree[maxn*];
int L[maxn],R[maxn],index;
int vis[maxn] = {};
int a[maxn];
vector<int> g[maxn];
void dfs(int x)
{
L[x] = index;
for(int i=;i<g[x].size();i++)
{
int v = g[x][i];
if(!vis[v])
{
vis[v] = ;
index++;
dfs(v);
}
}
R[x] = index;
}
void push_up(int q)
{
tree[q].v = tree[lson].v+tree[rson].v;
}
void build(int l,int r,int q)
{
tree[q].l = l,tree[q].r = r,tree[q].mid = (l+r)/;
tree[q].lazy = ;
if(l==r)
{
tree[q].v = a[l];
//printf("%d %d\n",l,tree[q].v);
return;
}
build(l,tree[q].mid,lson);
build(tree[q].mid+,r,rson);
push_up(q);
}
void push_down(int q)
{
if(tree[q].lazy)
{
tree[lson].v = (tree[lson].r-tree[lson].l+)-tree[lson].v;
tree[rson].v = (tree[rson].r-tree[rson].l+)-tree[rson].v;
tree[q].lazy ^= ;
tree[lson].lazy ^= ;
tree[rson].lazy ^= ;
}
}
void update(int l,int r,int q)
{
if(tree[q].l>=l&&tree[q].r<=r)
{
tree[q].lazy ^= ;
tree[q].v = (tree[q].r-tree[q].l+)-tree[q].v;
return;
}
push_down(q);
if(l<=tree[q].mid) update(l,r,lson);
if(r>=tree[q].mid+) update(l,r,rson);
push_up(q); ///v值由下往上更新
}
int query(int l,int r,int q) ///由上及下
{
if(tree[q].l>=l&&tree[q].r<=r)
{
// printf("%d %d %d %d\n",tree[q].l,tree[q].r,tree[q].v,tree[q].lazy);
return tree[q].v;
}
push_down(q);
int sum = ;
if(l<=tree[q].mid) sum += query(l,r,lson);
if(r>=tree[q].mid+) sum += query(l,r,rson);
return sum;
}
int main()
{
int n;scanf("%d",&n);
for(int i=;i<=n;i++)
{
int x;scanf("%d",&x);
g[x].push_back(i);
g[i].push_back(x);
}
index = ;vis[] = ;
dfs();
for(int i=;i<=n;i++)
{
int cc;
scanf("%d",&cc);
a[L[i]] = cc; ///按dfs序来赋值
}
build(,n,);
int q;scanf("%d",&q);
while(q--)
{
char s[];
int v;
scanf("%s %d",s,&v);
if(s[]=='g')
{
printf("%d\n",query(L[v],R[v],));
}
else
{
update(L[v],R[v],);
}
}
return ;
}
/*
10
1 2 3 3 5 5 7 7 8
0 0 0 0 1 1 1 1 0 0
10
pow 3
get 3
*/
Codeforces Round #442 (Div. 2) Danil and a Part-time Job的更多相关文章
- Codeforces Round #442 (Div. 2) E Danil and a Part-time Job (dfs序加上一个线段树区间修改查询)
题意: 给出一个具有N个点的树,现在给出两种操作: 1.get x,表示询问以x作为根的子树中,1的个数. 2.pow x,表示将以x作为根的子树全部翻转(0变1,1变0). 思路:dfs序加上一个线 ...
- Codeforces Round #442 Div.2 A B C D E
A. Alex and broken contest 题意 判断一个字符串内出现五个给定的子串多少次. Code #include <bits/stdc++.h> char s[110]; ...
- Codeforces Round #442 (Div. 2)
A. Alex and broken contest time limit per test 2 seconds memory limit per test 256 megabytes input s ...
- Codeforces Round #442 (Div. 2)A,B,C,D,E(STL,dp,贪心,bfs,dfs序+线段树)
A. Alex and broken contest time limit per test 2 seconds memory limit per test 256 megabytes input s ...
- 【Codeforces Round #442 (Div. 2) A】Alex and broken contest
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 注意是所有的名字里面,只出现了其中某一个名字一次. [代码] #include <bits/stdc++.h> usin ...
- 【Codeforces Round #442 (Div. 2) D】Olya and Energy Drinks
[链接] 我是链接,点我呀:) [题意] 给一张二维点格图,其中有一些点可以走,一些不可以走,你每次可以走1..k步,问你起点到终点的最短路. [题解] 不能之前访问过那个点就不访问了.->即k ...
- 【Codeforces Round #442 (Div. 2) C】Slava and tanks
[链接] 我是链接,点我呀:) [题意] 有n个位置,每个位置都可能有不定数量的tank; 你每次可以选择一个位置投掷炸弹. 并且,这个位置上的所有tank都会受到你的攻击. 并且失去一点体力. 然后 ...
- 【Codeforces Round #442 (Div. 2) B】Nikita and string
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举中间那一段从哪里开始.哪里结束就好 注意为空的话,就全是a. 用前缀和优化一下. [代码] #include <bits/ ...
- Codeforces Round #442 (Div. 2) B题【一道模拟题QAQ】
B. Nikita and string One day Nikita found the string containing letters "a" and "b&qu ...
随机推荐
- html5音频audio对象封装成vue组件的方式调用以及setTimeout如何在vue2生效 (vue2正在熟悉中,ajax还是用jQuery来写舒服些,里面含有一些php写法可略过) 此网页应用在PC不考虑手机端
// vue2 组件封装如下: <template> <div> <div><!--vue element 组件的引用 Switch 开关 不懂请自行百度(重 ...
- JQuery 在线编辑器和手册
JQuery 在线编辑器 JQuery 在线编辑器 JQuery 菜鸟教程 手册 JQuery 菜鸟教程 手册
- Python爬取全站妹子图片,差点硬盘走火了!
在这严寒的冬日,为了点燃我们的热情,今天小编可是给大家带来了偷偷收藏了很久的好东西.大家要注意点哈,我第一次使用的时候,大意导致差点坏了大事哈! 1.所需库安装 2.网站分析 首先打开妹子图的官网(m ...
- MongoDB之Replica Sets环境搭建
最近学习MongoDB,这两天在搭建复制集的时候碰到了不少问题,也踩了好多坑,现在在这里记录下来,以供自己和他人参考 (因为本人是初学者,所以遇到的问题也会比较初级,所以本文也比较适合初学者查阅) 背 ...
- Java-framework-Vaadin
安装vaadin: (1) 首先试了maven+vaadin. 安装maven: 1. unzip apache-maven-3.3.9-bin.zip 2. modify PATH environm ...
- 前端之bootstrap
一.响应式介绍 众所周知,电脑.平板.手机的屏幕是差距很大的,假如在电脑上写好了一个页面,在电脑上看起来不错,但是如果放到手机上的话,那可能就会乱的一塌糊涂,这时候怎么解决呢?以前,可以再专门为手机定 ...
- L2-006 树的遍历 RTA
L2-006 树的遍历(25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(<=30),是二叉树 ...
- cf 1016C
C. Vasya And The Mushrooms time limit per test 2 seconds memory limit per test 256 megabytes input s ...
- activity-alias
activity-alias标签,它有一个属性叫android:targetActivity,这个属性就是用来为该标签设置目标Activity的,或者说它就是这个目标Activity的别名.至此我们已 ...
- Django底层原理简介与安装
Django环境目录搭建一栏: 利用wsgiref模块封装好的socket搭建服务端: #利用wsgiref模块封装好的socket演示操作(例如accept\recv) #也可以实现socket服务 ...