题目:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=2397

代码如下:

#include <iostream>
#include <fstream>
#include <cstring>using namespace std;#define lson(x) ((x) << 1)
#define rson(x) ((x << 1) + 1)const int N = 4000001;
const int STR_LEN = 60;class Node
{
public:int l, r, v, setv, resv;void set(int l, int r, int v, int setv, int resv){this->l = l;this->r = r;this->v = v;this->setv = setv;this->resv = resv;}
};
Node node[N];
int v[N];class RMQ
{
public:RMQ(){tree = node;}void build(int root, int left, int right){if (left == right){tree[root].set(left, right, v[left - 1], -1, 0);}else{int mid = (left + right) >> 1;build(lson(root), left, mid);build(rson(root), mid + 1, right);pushup(root);}}void update(int root, int left, int right, int v){if (left <= node[root].l && right >= tree[root].r){set_node(root, v);return;}int mid = (tree[root].l + tree[root].r) >> 1;pushdown(root);if (left <= mid) update(lson(root), left, right, v);if (right > mid) update(rson(root), left, right, v);pushup(root);}void reverse(int root, int left, int right){if (left <= tree[root].l && right >= tree[root].r){res_node(root);return;}int mid = (tree[root].l + tree[root].r) >> 1;pushdown(root);if (left <= mid) reverse(lson(root), left, right);if (right > mid) reverse(rson(root), left, right);pushup(root);}int query(int root, int left, int right){if (left <= tree[root].l && right >= tree[root].r){return tree[root].v;}int mid = (tree[root].l + tree[root].r) >> 1;pushdown(root);int result = 0;if (left <= mid) result += query(lson(root), left, right);if (right > mid) result += query(rson(root), left, right);pushup(root);return result;}private:void pushup(int root){tree[root].set(tree[lson(root)].l, tree[rson(root)].r, tree[lson(root)].v + tree[rson(root)].v, -1, 0);}void set_node(int u, int v){tree[u].setv = v;tree[u].resv = 0;tree[u].v = v * (tree[u].r - tree[u].l + 1);}void res_node(int u){tree[u].resv ^= 1;tree[u].v = tree[u].r - tree[u].l + 1 - tree[u].v;}void pushdown(int root){if (tree[root].setv >= 0){set_node(lson(root), tree[root].setv);set_node(rson(root), tree[root].setv);tree[root].setv = -1;}if (tree[root].resv){res_node(lson(root));res_node(rson(root));tree[root].resv = 0;}}private:Node *tree;
};int main()
{
#ifndef ONLINE_JUDGEstd::ifstream fin("f:\\OJ\\uva_in.txt");std::streambuf* back = std::cin.rdbuf(fin.rdbuf());
#endifint t;RMQ rmq;std::cin >> t;for (int i = 1; i <= t; i++) {int m;std::cin >> m;char str[STR_LEN];memset(v, 0x00, sizeof(v));int len = 0;while (m--){int t;cin >> t >> str;int n = strlen(str);for (int j = 0; j < t; j++){for (int k = 0; k < n; k++){if (str[k] == '1'){v[len] = 1;}len++;}}}rmq.build(1, 1, len);int q;std::cin >> q;int qcnt = 1;std::cout << "Case " << i << ":" << std::endl;for (int i = 0; i < q; i++){int a, b;std::cin >> str >> a >> b;if (str[0] == 'F') rmq.update(1, a + 1, b + 1, 1);else if (str[0] == 'E') rmq.update(1, a + 1, b + 1, 0);else if (str[0] == 'I') rmq.reverse(1, a + 1, b + 1);else if (str[0] == 'S'){int ans = rmq.query(1, a + 1, b + 1);std::cout << "Q" << qcnt++ << ": " << ans << std::endl;}}}#ifndef ONLINE_JUDGEstd::cin.rdbuf(back);
#endifreturn 0;
}

UVa11402 Ahoy, Pirates!相关推荐

  1. [代码]ural 1655 Somali Pirates

    Abstract ural 1655 Somali Pirates dp Source http://acm.timus.ru/problem.aspx?space=1&num=1655 So ...

  2. [转载]SDL 用法,第 5 部分:Pirates Ho! 中界面设计的原则 - 简易性、一致性和引人入胜

    SDL 用法,第 5 部分:"Pirates Ho!" 中界面设计的原则 简易性.一致性和引人入胜 Sam Lantinga Loki Entertainment Software ...

  3. ZOJ3323 Somali Pirates java

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3323                               ...

  4. ZOJ 3323Somali Pirates

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3323 题面: Somali Pirates Time Limit ...

  5. SPOJ 4564 Chop Ahoy! Revisited!

    可以用f[i][j]表示递推到前i位时最后一段的和是j的情况种数,然后进行dp即可. #include<stdio.h> #include<string.h> #define ...

  6. zoj 3323 Somali Pirates

    /* 字符串去数字输出 还有比这更水的题么 */ #include<iostream> #include<string> using namespace std; bool i ...

  7. ZOJ 3323 Somali Pirates(模拟)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3323 输入一段字符串,删除里面所有的数字 #include<iost ...

  8. hdu_oj1538A Puzzle for Pirates(海盗分金)

    这道题目确实很难,特判的情况很多,参考了大神的题解才AC掉 http://blog.csdn.net/ACM_cxlove?viewmode=contents           by---cxlov ...

  9. HDU 1538 A Puzzle for Pirates(经典的海盗分金推理)

    题目: 这是一个经典问题,有n个海盗,分m块金子,其中他们会按一定的顺序提出自己的分配方案,如果50%以上的人赞成,则方案通过,开始分金子,如果不通过,则把提出方案的扔到海里,下一个人继续. 首先我们 ...

最新文章

  1. YUM在园区网络中的应用
  2. 一些java基本程序图解2
  3. Vue项目怎样打包并部署在WindowsServer服务器通过IP访问
  4. 3D数学 向量和矩阵
  5. Hadoop namenode启动瓶颈分析
  6. 基本数据类型(dict)
  7. libevent 源码深度剖析十三
  8. 微软将推出Surface Duo双屏手机:售价1399美元
  9. 谷歌浏览器software_reporter_tool关闭
  10. 华为S9306简单实用配置合集
  11. 《JavaScript设计模式》初次笔记——wsdchong
  12. 下载谷歌瓦片地图并拼接为高清大图
  13. Ubuntu 安装 Google Chrome 浏览器
  14. 杭州异地身份证办理条件以及材料
  15. 汇总 | 嵌入式软硬件领域各种“黑科技”
  16. CF1132D Stressful Training(优先队列+二分)
  17. 移动电源有哪些产品?热门的移动电源推荐
  18. 如何在电脑上添加蓝牙耳机设备
  19. imp导入备份时报:无法转换为环境字符集句柄 ...
  20. .net基础学java系列(五)慢性自杀 之 沉沦在IDE中

热门文章

  1. East Central North America Region 2015
  2. SQL Server 表分区注意事项(转载)
  3. 图形图像处理_c/c++
  4. 武汉.NET俱乐部论坛已经恢复
  5. 自学python清单-机器学习和Python怎样快速掌握?你一定需要这27张清单
  6. python在线工具-6 种 Python 数据可视化工具
  7. 零基础学python需要多久-零基础学习Python大概要多久,感悟分享?
  8. python教学视频下载-Python机器学习入门教程全套视频下载【传智播客】
  9. 怎么知道python有哪些库、哪些方法-哪些 Python 库让你相见恨晚?
  10. python第三方库numpy-Python中的第三方库——Numpy