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 ...
随机推荐
- 激活Windows 10 正式版
原文 http://jingyan.baidu.com/article/27fa732684b5f646f8271ff4.html Windows 10只提供为期一年的免费升级.因此,不要无限拖延期自 ...
- Spring学习笔记1——IOC: 尽量使用注解以及java代码(转)
在实战中学习Spring,本系列的最终目的是完成一个实现用户注册登录功能的项目. 预想的基本流程如下: 1.用户网站注册,填写用户名.密码.email.手机号信息,后台存入数据库后返回ok.(学习IO ...
- 脑波设备mindwave介绍
脑波,又称之为脑电波,是人大脑发出的电波,非常的微弱,只能通过设备来检测. 人的脑波在不同状态下,会不同,因此可以通过脑波来量化分析人的精神状态. 科学家讲脑电波分为四种,以下为详细解释(摘自百度百科 ...
- Airport(未解决。。。)
Airport Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- javascript事件及事件传输
函数必须调用才能执行,可a()加下面的函数调用 JS事件 1.js事件通常和函数结合来使用,这样可以通过发生的事件来驱动函数的执行,从而引起html出现不同的效果. 2.属性(当这些事件的属性发生时, ...
- JUnit4的使用2
package com.imooc.test.aware; import org.junit.Test; import org.junit.runner.RunWith; import org.jun ...
- UIWebvView 解决onClick 延迟相应问题
在使用 UIWebView 的过程中, 发现 onClick 触发需要等待300-500ms, Google了一下, 发现是因为ScrollView 在等待doubleTap, 所以有延迟 使用如下代 ...
- hdu 2814 快速求欧拉函数
/** 大意: 求[a,b] 之间 phi(a) + phi(a+1)...+ phi(b): 思路: 快速求欧拉函数 **/ #include <iostream> #include & ...
- (IOS)签名Demo
思路是将每一次按下屏幕的touch move时的点存到一个数组里,即一个数组相当于一个笔画:再将该代表笔画的数组保存到一个大数组中,每组每次touch的移动都历遍大数组和笔画数组,将点于点之间连接起来 ...
- QMessageBox 用法
案例一:QMessageBox msgBox;msgBox.setText("The document has been modified.");msgBox.setInforma ...