zoukankan      html  css  js  c++  java
  • Codeforces Round #442 (Div. 2) Danil and a Part-time Job

    http://codeforces.com/contest/877/problem/E

    真的菜的不行,自己敲一个模板,到处都是问题。哎

      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 const int maxn = 2e5+5;
      4 #define lson (q<<1)
      5 #define rson ((q<<1)|1)
      6 struct node
      7 {
      8     int l,r,mid;
      9     int v,lazy;
     10 }tree[maxn*4];
     11 int L[maxn],R[maxn],index;
     12 int vis[maxn] = {0};
     13 int a[maxn];
     14 vector<int> g[maxn];
     15 void dfs(int x)
     16 {
     17     L[x] = index;
     18     for(int i=0;i<g[x].size();i++)
     19     {
     20         int v = g[x][i];
     21         if(!vis[v])
     22         {
     23             vis[v] = 1;
     24             index++;
     25             dfs(v);
     26         }
     27     }
     28     R[x] = index;
     29 }
     30 void push_up(int q)
     31 {
     32     tree[q].v = tree[lson].v+tree[rson].v;
     33 }
     34 void build(int l,int r,int q)
     35 {
     36     tree[q].l = l,tree[q].r = r,tree[q].mid = (l+r)/2;
     37     tree[q].lazy = 0;
     38     if(l==r)
     39     {
     40         tree[q].v = a[l];
     41         //printf("%d %d
    ",l,tree[q].v);
     42         return;
     43     }
     44     build(l,tree[q].mid,lson);
     45     build(tree[q].mid+1,r,rson);
     46     push_up(q);
     47 }
     48 void push_down(int q)
     49 {
     50     if(tree[q].lazy)
     51     {
     52         tree[lson].v = (tree[lson].r-tree[lson].l+1)-tree[lson].v;
     53         tree[rson].v = (tree[rson].r-tree[rson].l+1)-tree[rson].v;
     54         tree[q].lazy ^= 1;
     55         tree[lson].lazy ^= 1;
     56         tree[rson].lazy ^= 1;
     57     }
     58 }
     59 void update(int l,int r,int q)
     60 {
     61     if(tree[q].l>=l&&tree[q].r<=r)
     62     {
     63         tree[q].lazy ^= 1;
     64         tree[q].v = (tree[q].r-tree[q].l+1)-tree[q].v;
     65         return;
     66     }
     67     push_down(q);
     68     if(l<=tree[q].mid) update(l,r,lson);
     69     if(r>=tree[q].mid+1) update(l,r,rson);
     70     push_up(q); ///v值由下往上更新
     71 }
     72 int query(int l,int r,int q)  ///由上及下
     73 {
     74     if(tree[q].l>=l&&tree[q].r<=r)
     75     {
     76        // printf("%d %d %d %d
    ",tree[q].l,tree[q].r,tree[q].v,tree[q].lazy);
     77         return tree[q].v;
     78     }
     79     push_down(q);
     80     int sum = 0;
     81     if(l<=tree[q].mid) sum += query(l,r,lson);
     82     if(r>=tree[q].mid+1) sum += query(l,r,rson);
     83     return sum;
     84 }
     85 int main()
     86 {
     87     int n;scanf("%d",&n);
     88     for(int i=2;i<=n;i++)
     89     {
     90         int x;scanf("%d",&x);
     91         g[x].push_back(i);
     92         g[i].push_back(x);
     93     }
     94     index = 1;vis[1] = 1;
     95     dfs(1);
     96     for(int i=1;i<=n;i++)
     97     {
     98         int cc;
     99         scanf("%d",&cc);
    100         a[L[i]] = cc; ///按dfs序来赋值
    101     }
    102     build(1,n,1);
    103     int q;scanf("%d",&q);
    104     while(q--)
    105     {
    106         char s[5];
    107         int v;
    108         scanf("%s %d",s,&v);
    109         if(s[0]=='g')
    110         {
    111             printf("%d
    ",query(L[v],R[v],1));
    112         }
    113         else
    114         {
    115             update(L[v],R[v],1);
    116         }
    117     }
    118     return 0;
    119 }
    120 /*
    121 10
    122 1 2 3 3 5 5 7 7 8
    123 0 0 0 0 1 1 1 1 0 0
    124 10
    125 pow 3
    126 get 3
    127 */
  • 相关阅读:
    增加浏览数
    seo页面的分类:静态,伪静态,动态
    在页面设计中开始seo
    页面SEO中文章标题的优化技巧
    SEO中关于撰写页面标题的7个技巧转
    评 谷歌研发先进编程技术 简化Web应用开发
    转 苹果自家的 Web 服务器和开发语言用的是什么方案?
    转 微软平台生态圈已经改变
    微软的烂设计与苹果的优秀设计
    Win8探索之组件平台之路
  • 原文地址:https://www.cnblogs.com/littlepear/p/7728969.html
Copyright © 2011-2022 走看看