D. Persistent Bookcase

题目连接:

http://www.codeforces.com/contest/707/problem/D

Description

Recently in school Alina has learned what are the persistent data structures: they are data structures that always preserves the previous version of itself and access to it when it is modified.

After reaching home Alina decided to invent her own persistent data structure. Inventing didn't take long: there is a bookcase right behind her bed. Alina thinks that the bookcase is a good choice for a persistent data structure. Initially the bookcase is empty, thus there is no book at any position at any shelf.

The bookcase consists of n shelves, and each shelf has exactly m positions for books at it. Alina enumerates shelves by integers from 1 to n and positions at shelves — from 1 to m. Initially the bookcase is empty, thus there is no book at any position at any shelf in it.

Alina wrote down q operations, which will be consecutively applied to the bookcase. Each of the operations has one of four types:

1 i j — Place a book at position j at shelf i if there is no book at it.

2 i j — Remove the book from position j at shelf i if there is a book at it.

3 i — Invert book placing at shelf i. This means that from every position at shelf i which has a book at it, the book should be removed, and at every position at shelf i which has not book at it, a book should be placed.

4 k — Return the books in the bookcase in a state they were after applying k-th operation. In particular, k = 0 means that the bookcase should be in initial state, thus every book in the bookcase should be removed from its position.

After applying each of operation Alina is interested in the number of books in the bookcase. Alina got 'A' in the school and had no problem finding this values. Will you do so?

Input

The first line of the input contains three integers n, m and q (1 ≤ n, m ≤ 103, 1 ≤ q ≤ 105) — the bookcase dimensions and the number of operations respectively.

The next q lines describes operations in chronological order — i-th of them describes i-th operation in one of the four formats described in the statement.

It is guaranteed that shelf indices and position indices are correct, and in each of fourth-type operation the number k corresponds to some operation before it or equals to 0.

Output

For each operation, print the number of books in the bookcase after applying it in a separate line. The answers should be printed in chronological order.

Sample Input

2 3 3

1 1 1

3 2

4 0

Sample Output

1

4

0

Hint

题意

你有n个书架,每个书架有m层。

有四个操作

1 i j,在第i个书架第j层放一本书。

2 i j,把第i个书架第j层的书扔掉

3 i,把第三层的所有书的状态取反,就有的变没,没的变有

4 k,回到第k个询问时候的状态。

题解:

n才1000,所以nq随便过,xjb拿个bitset搞一搞就好了

至于第四个操作,我们根据询问的顺序建树,然后dfs去搞一波就好了

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
int n,m,q;
vector<int> E[maxn];
int op[maxn],a[maxn],b[maxn],c[maxn];
int ans[maxn];
bitset<1001>Bit[1001];
bitset<1001>C;
void dfs(int x)
{
if(x==0)
{
for(int i=0;i<E[x].size();i++)
{
ans[E[x][i]]=ans[x];
dfs(E[x][i]);
}
}
if(op[x]==1)
{
int flag = 0;
if(!Bit[a[x]][b[x]])
{
flag = 1;
ans[x]++;
Bit[a[x]][b[x]]=1;
}
for(int i=0;i<E[x].size();i++)
{
ans[E[x][i]]=ans[x];
dfs(E[x][i]);
}
if(flag)
Bit[a[x]][b[x]]=0;
}
if(op[x]==2)
{
int flag = 0;
if(Bit[a[x]][b[x]])
{
flag = 1;
ans[x]--;
Bit[a[x]][b[x]]=0;
}
for(int i=0;i<E[x].size();i++)
{
ans[E[x][i]]=ans[x];
dfs(E[x][i]);
}
if(flag)
Bit[a[x]][b[x]]=1;
}
if(op[x]==3)
{
ans[x]=ans[x]-Bit[a[x]].count();
Bit[a[x]]^=C;
ans[x]=ans[x]+Bit[a[x]].count();
for(int i=0;i<E[x].size();i++)
{
ans[E[x][i]]=ans[x];
dfs(E[x][i]);
}
Bit[a[x]]^=C;
}
if(op[x]==4)
{
for(int i=0;i<E[x].size();i++)
{
ans[E[x][i]]=ans[x];
dfs(E[x][i]);
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=m;i++)
C[i]=1;
for(int i=1;i<=q;i++)
{
scanf("%d",&op[i]);
if(op[i]==1)
scanf("%d%d",&a[i],&b[i]);
if(op[i]==2)
scanf("%d%d",&a[i],&b[i]);
if(op[i]==3)
scanf("%d",&a[i]);
if(op[i]==4)
scanf("%d",&a[i]),
E[a[i]].push_back(i);
else
E[i-1].push_back(i);
}
dfs(0);
for(int i=1;i<=q;i++)
printf("%d\n",ans[i]);
}

Codeforces Round #368 (Div. 2) D. Persistent Bookcase 离线 暴力的更多相关文章

  1. Codeforces Round #368 (Div. 2) D. Persistent Bookcase

    Persistent Bookcase Problem Description: Recently in school Alina has learned what are the persisten ...

  2. Codeforces Round #368 (Div. 2)D. Persistent Bookcase DFS

    题目链接:http://codeforces.com/contest/707/my 看了这位大神的详细分析,一下子明白了.链接:http://blog.csdn.net/queuelovestack/ ...

  3. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  4. Codeforces Round #368 (Div. 2) C. Pythagorean Triples(数学)

    Pythagorean Triples 题目链接: http://codeforces.com/contest/707/problem/C Description Katya studies in a ...

  5. Codeforces Round #368 (Div. 2) B. Bakery (模拟)

    Bakery 题目链接: http://codeforces.com/contest/707/problem/B Description Masha wants to open her own bak ...

  6. Codeforces Round #368 (Div. 2) A. Brain's Photos (水题)

    Brain's Photos 题目链接: http://codeforces.com/contest/707/problem/A Description Small, but very brave, ...

  7. Codeforces Round #297 (Div. 2)D. Arthur and Walls 暴力搜索

    Codeforces Round #297 (Div. 2)D. Arthur and Walls Time Limit: 2 Sec  Memory Limit: 512 MBSubmit: xxx ...

  8. D. Persistent Bookcase(Codeforces Round #368 (Div. 2))

    D. Persistent Bookcase time limit per test 2 seconds memory limit per test 512 megabytes input stand ...

  9. Codeforces Round #368 (Div. 2) E. Garlands 二维树状数组 暴力

    E. Garlands 题目连接: http://www.codeforces.com/contest/707/problem/E Description Like all children, Ale ...

随机推荐

  1. bzoj千题计划227:bzoj1486: [HNOI2009]最小圈

    http://www.lydsy.com/JudgeOnline/problem.php?id=1486 二分答案 dfs版spfa判负环 #include<queue> #include ...

  2. python学习笔记5--json处理

    import json #json串就是字符串. d = { 'car':{'color':'red','price':100,'count':50}, 'bus':{'color':'red','p ...

  3. 史上最全的浏览器 CSS & JS Hack 手册

    浏览器渲染页面的方式各不相同,甚至同一浏览器的不同版本(“杰出代表”是 IE)也有差异.因此,浏览器兼容成为前端开发人员的必备技能.如果有一份浏览器 Hack 手册,那查询起来就方便多了.这篇文章就向 ...

  4. 格式化 SQL 来提高效率

    本文由 伯乐在线 - cucr 翻译,黄利民 校稿.未经许可,禁止转载!英文出处:msiman.ga.欢迎加入翻译小组. 背景 已格式化的SQL并不比未格式化SQL运行地更快.数据库可能真的不太在意你 ...

  5. Javascript中与Scroll有关的方法

    这块确实太乱了,被兼容搞的简直快要晕死,默默地总结下... 与scroll相关的方法 4个window对象下:scrollX.scrollY.scrollTo.scroll(作用和scrollTo一样 ...

  6. 【转】详解linux vi命令用法

    功能最强在的编辑器--vi vi是所有UNIX系统都会提供的屏幕编辑器,它提供了一个视窗设备,通过它可以编辑文件.当然,对UNIX系统略有所知的人, 或多或少都觉得vi超级难用,但vi是最基本的编辑器 ...

  7. Python基础教程-第3版(文字版) 超清文字-非扫描版 [免积分、免登录]

    此处免费下载,无需账号,无需登录,无需积分.收集自互联网,侵权通知删除. 点击下载:Python基础教程-第3版 备用下载:Python基础教程-第3版

  8. win10下安装MinGW-w64 - for 32 and 64 bit Windows

    对于不经常使用c语言的同学来说,只需要安装MinGW-w64 - for 32 and 64 bit Windows,就可以使用GCC在命令行对c源码进行编译. 首先打开命令行检查自己是否已经安装了g ...

  9. imperva代理拦截

    <external-traffic-monitoring-in-kern>true</external-traffic-monitoring-in-kern> 添加这段就可以开 ...

  10. Opencv学习笔记——release和debug两个模式的运行问题

    本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 作者:晨凫 ...