2014 网选 广州赛区 hdu 5023 A Corrupt Mayor's Performance Art

简介:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define N 1000005
using namespace std;

int c[35];
int tree[N*4];//正值表示该节点所管理的区间的颜色是纯色,-1表示的是非纯色
int n, m; 

void buildT(int ld, int rd, int p){
    if(ld <= rd){
        tree[p] = 2;//初始每一个节点的颜色全部都是2
        if(ld == rd) return;
        int mid=(ld + rd)>>1;
        buildT(ld, mid, p<<1);
        buildT(mid+1, rd, p<<1|1);
    }
}

void updateT(int ld, int rd, int a, int b, int col, int p){
    
    if(ld > rd) return ;
    
    if(tree[p] == col) return ;
    
    if(ld == a && rd == b){
        tree[p] = col;
        return ;
    }
    int mid = (ld + rd)>>1;
    
    if(tree[p] != -1){// p所管的区间之前是纯色,现在不是纯色了,向下更新其孩子节点的颜色为它的颜色
        tree[p<<1] = tree[p<<1 | 1] = tree[p];
        tree[p] = -1;
    }
    
    if(a > mid)
        updateT(mid+1, rd, a, b, col, p<<1 | 1);
    else if(b <= mid)
        updateT(ld, mid, a, b, col, p<<1);
    else{
        updateT(ld, mid, a, mid, col, p<<1);
        updateT(mid+1, rd, mid+1, b, col, p<<1 | 1);
    }
}

int cnt;

void querryT(int ld, int rd, int a, int b, int p){
    if(ld>rd) return ; 
    
    if(tree[p] != -1){//一直找到纯色的区间!
        c[tree[p]]=1;
        return ;
    }
    
    int mid = (ld+rd)>>1;
    if(a > mid)
        querryT(mid+1, rd, a, b, p<<1 | 1);
    else if(b <= mid)
        querryT(ld, mid, a, b, p<<1) ;
    else{
        querryT(ld, mid, a, mid, p<<1);
        querryT(mid+1, rd, mid+1, b, p<<1 | 1);
    }
}

int main(){
    while(scanf("%d%d", &n, &m) && (n || m)){
        char ch[2];
        int a, b, k;
        buildT(1, n, 1);
        while(m--){
            scanf("%s", ch);
            if(ch[0] == 'P'){
                scanf("%d%d%d", &a, &b, &k);
                updateT(1, n, a, b, k, 1);
            }
            else{
                scanf("%d%d", &a, &b);
                memset(c, 0, sizeof(c));
                querryT(1, n, a, b, 1);
                int i;
                for(i=1; i<=30; ++i)
                    if(c[i]){
                         printf("%d", i);
                         break;
                    }
                for(++i; i<=30; ++i)
                    if(c[i]) printf(" %d", i);
                printf("\n");
            }
        }
    }
    return 0;
}

目录
相关文章
|
6月前
|
人工智能 算法 ice
【2024美赛】D题(中英文):五大湖水资源问题Problem Problem D: Great Lakes Water Problem
【2024美赛】D题(中英文):五大湖水资源问题Problem Problem D: Great Lakes Water Problem
71 1
|
6月前
|
人工智能 Java
hdu 1165 Eddy's research II
hdu 1165 Eddy's research II
33 0
|
6月前
|
Java
hdu 1164 Eddy's research I
hdu 1164 Eddy's research I
32 0
Leetcode 365. Water and Jug Problem
一句话理解题意:有容积为x和y升的俩水壶,能不能量出z升的水。 我刚开始看到这题,立马就想了下暴力搜索的可能性,但考虑了下数据大小,立马放弃这个暴力的想法,于是意识到肯定有比较简单的数学方法,其实我自己没想到,后来看还是看了别人的代码,很多博客都直接给出了解法, 但没介绍为什么能这么解。所以我决定解释下我自己的思路。
46 0
2021 ICPC Asia Regionals Online Contest (II) Problem G. Limit
2021 ICPC Asia Regionals Online Contest (II) Problem G. Limit
The Preliminary Contest for ICPC China Nanchang National Invitational H题 Coloring Game
The Preliminary Contest for ICPC China Nanchang National Invitational H题 Coloring Game
86 0
The Preliminary Contest for ICPC China Nanchang National Invitational A题 PERFECT NUMBER PROBLEM
The Preliminary Contest for ICPC China Nanchang National Invitational A题 PERFECT NUMBER PROBLEM
67 0
LeetCode 365. Water and Jug Problem
有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?
80 0
LeetCode 365. Water and Jug Problem
|
机器学习/深度学习 BI
2020-2021 ACM-ICPC, Asia Seoul Regional Contest L. Two Buildings (决策单调性 分治)
2020-2021 ACM-ICPC, Asia Seoul Regional Contest L. Two Buildings (决策单调性 分治)
130 0
2020-2021 ACM-ICPC, Asia Seoul Regional Contest L. Two Buildings (决策单调性 分治)
|
人工智能 Java
HDU - 2018杭电ACM集训队单人排位赛 - 4 - Problem J. number sequence
HDU - 2018杭电ACM集训队单人排位赛 - 4 - Problem J. number sequence
130 0