Poj 2777 Count Color(线段树基础)
又毁三观了.......虽然题目数据有坑:区间【a,b】可能会有a>b的情况,但是我一开始没有考虑它也能过。
此外莫名其妙的TLE
- #include <iostream>
- #include <algorithm>
- #include <cmath>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <string>
- #include <vector>
- #include <set>
- #include <map>
- #include <queue>
- #include <stack>
- #include <climits>
- #define MAX 100005
- #define INF 0x7FFFFFFF
- #define REP(i,s,t) for(int i=(s);i<=(t);++i)
- #define ll long long
- #define mem(a,b) memset(a,b,sizeof(a))
- #define mp(a,b) make_pair(a,b)
- #define L(x) x<<1
- #define R(x) x<<1|1
- # define eps 1e-5
- //#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
- using namespace std;
- struct node {
- int left,right,mid,value,add;
- } edge[4*MAX];
- int aa[MAX];
- int vis[33];
- int ans ;
- void push_up(int x) {
- if(edge[R(x)].add != edge[L(x)].add)
- edge[x].add = 0;
- }
- void build(int l,int r,int num) {
- edge[num].left = l;
- edge[num].right = r;
- edge[num].mid = (l+r) >> 1;
- edge[num].add = 1;
- if(l == r) {
- edge[num].value = 1;
- return ;
- }
- build(l,edge[num].mid,num * 2); //左子树
- build(edge[num].mid + 1,r,num*2+1); //右子树
- push_up(num);
- }
- void push_down(int x) {
- if(edge[x].add) {
- //edge[L(x)].value = (edge[L(x)].right - edge[L(x)].left + 1 ) * edge[x].add ;
- //edge[R(x)].value = (edge[R(x)].right - edge[R(x)].left + 1) * edge[x].add ;
- edge[L(x)].add = edge[x].add ;
- edge[R(x)].add = edge[x].add ;
- edge[x].add = 0 ;
- }
- }
- void update(int l, int r, int k, int num) {
- if(edge[num].left >= l && edge[num].right <= r) {
- //当前区间包含于更新区间
- edge[num].add = k;
- return;
- }
- push_down(num);
- if(edge[num].mid < l) update(l, r, k, num*2+1);
- else if(edge[num].mid >= r) update(l, r, k, num*2);
- else {
- update(l, edge[num].mid, k, num*2);
- update(edge[num].mid + 1, r, k, num*2+1);
- }
- push_up(num);
- }
- void query(int l,int r,int num) {
- //if(l == edge[num].left && r == edge[num].right) //很想知道加了这个判断后TLE,不加400ms以内是为什么,按理加它是没有问题的......
- if(edge[num].add != 0) {
- if(vis[edge[num].add] == 0) {
- ans++;
- vis[edge[num].add] = 1;
- }
- return ;
- }
- push_down(num);
- if(r <= edge[num].mid)
- query(l,r,num*2);
- else if(l >= edge[num].mid + 1)
- query(l,r,num *2+1);
- else {
- query(l,edge[num].mid,num*2);
- query(edge[num].mid+1,r,num*2+1);
- }
- }
- int main() {
- int n,m,l,i,x,y,c;
- char str[3] ;
- cin >> n >> l >> m;
- build(1,n,1);
- for(i=1; i<=m; i++) {
- scanf("%s",str);
- if(str[0] == 'C') {
- scanf("%d%d%d",&x,&y,&c);
- if(x > y)
- swap(x,y);
- update(x,y,c,1);
- }
- if(str[0] == 'P') {
- ans = 0;
- scanf("%d%d",&x,&y);
- if(x > y)
- swap(x,y);
- mem(vis,0);
- query(x,y,1);
- printf("%d\n",ans);
- }
- }
- return 0;
- }
Poj 2777 Count Color(线段树基础)的更多相关文章
- poj 2777 Count Color(线段树区区+染色问题)
题目链接: poj 2777 Count Color 题目大意: 给出一块长度为n的板,区间范围[1,n],和m种染料 k次操作,C a b c 把区间[a,b]涂为c色,P a b 查 ...
- poj 2777 Count Color(线段树)
题目地址:http://poj.org/problem?id=2777 Count Color Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
- poj 2777 Count Color - 线段树 - 位运算优化
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 42472 Accepted: 12850 Description Cho ...
- poj 2777 Count Color(线段树、状态压缩、位运算)
Count Color Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 38921 Accepted: 11696 Des ...
- POJ 2777 Count Color(线段树之成段更新)
Count Color Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33311 Accepted: 10058 Descrip ...
- POJ 2777 Count Color (线段树成段更新+二进制思维)
题目链接:http://poj.org/problem?id=2777 题意是有L个单位长的画板,T种颜色,O个操作.画板初始化为颜色1.操作C讲l到r单位之间的颜色变为c,操作P查询l到r单位之间的 ...
- POJ P2777 Count Color——线段树状态压缩
Description Chosen Problem Solving and Program design as an optional course, you are required to sol ...
- POJ 2777 Count Color(段树)
职务地址:id=2777">POJ 2777 我去.. 延迟标记写错了.标记到了叶子节点上.. . . 这根本就没延迟嘛.. .怪不得一直TLE... 这题就是利用二进制来标记颜色的种 ...
- poj 2777 Count Color
题目连接 http://poj.org/problem?id=2777 Count Color Description Chosen Problem Solving and Program desig ...
- POJ 2777 Count Color(线段树染色,二进制优化)
Count Color Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 42940 Accepted: 13011 Des ...
随机推荐
- viewpager的layout_width="wrap_content"无效问题
在viewpager当中直接使用layout_width="wrap_content"是无效的,扩展了一下.解决这个问题. package com.soulagou.ui; imp ...
- document.execCommand()函数可用参数解析
隐藏在暗处的方法-execCommand() 关键字: javascript document document.execCommand()方法可用来执行很多我们无法实现的操作. execComman ...
- 打造自己的sublime text
博主今天正在了解学习LESS,在找相关资源的过程中,发现自己的sublime text和别人差别有点大,突然脑海中一股逼格的气息油然而生,于是查找了相关资料,并打造了一下风格. 下面开始正文. 首先是 ...
- UIAlertView笔记
链接地址:http://www.cnblogs.com/scandy-yuan/archive/2013/03/11/2954194.html 1. 最简单的用法 UIAlertView*alert ...
- (待解决问题)nowrap在table和td都设置了宽度的时候仍然有效
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- win7 VMware Workstation Centos6.5虚机桥接上网设置 详解(靠谱)
1.VMware Workstation 设置 2. vim /etc/sysconfig/network-scripts/ifcfg-eth0 NAME="System eth0" ...
- LinkList Operation
链表典型数据结构: #define ElemType int typedef struct LinkNode{ ElemType value; struct LinkNode* next; }; 相比 ...
- hibernate Criteria查询 2.3
Criteria对象提供了一种面向对象的方式查询数据库.Criteria对象需要使用Session对象来获得一个Criteria对象表示对一个持久化类的查询 查询所有 Session session ...
- linux中grep的用法
http://www.9usb.net/200902/linux-grep.html http://blog.51yip.com/linux/1008.html http://blog.csdn.ne ...
- 质因数分解的rho以及miller-rabin
一.前言 质因数分解,是一个在算法竞赛里老生常谈的经典问题.我们在解决许多问题的时候需要用到质因数分解来辅助运算,而且质因数分解牵扯到许许多多经典高效的算法,例如miller-rabin判断素数算法, ...