CCPC 2019 网络赛 1002 array (权值线段树)

HDU 6703

?

题意:

? 给定一个数组 \(a_1,a_2, a_3,...a_n\) ,满足 \(1 \le a[i]\le n\) 且 \(a[i]\) 互不相同。
? 有两种操作:1. 将 \(a[pos]\) 的值加上 100000000;2. 询问不等于任何 \(a[i], (1 \le i \le r)\) 且不小于 \(k\) 的最小值。
?

思路:

? 注意 \(n,k\) 的范围都不超过 100000,对于操作一,相当于删除了这个数(询问的答案一定在区间 \([1, n]\) 内)。
?

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define lson rt<<1, l, mid
#define rson rt<<1|1, mid+1, r

const int maxn = 100010;
const int INF = 0x3f3f3f3f;
int tree[maxn<<2];
int arr[maxn];
int id[maxn];

void build(int rt, int l, int r) {
    if(l==r) {
        tree[rt] = id[l];
        return;
    }
    int mid = (l+r)>>1;
    build(lson);
    build(rson);
    tree[rt] = max(tree[rt<<1], tree[rt<<1|1]);
}

int query(int L, int R, int rt, int l, int r, int val) {
    if(l==r) {
        return l;
    }

    int ans = INF;
    int mid = (l+r)>>1;

    if(L<=mid && val<tree[rt<<1])
        ans = query(L, R, lson, val);
    if(ans!=INF) return ans;

    if(mid<R && val<tree[rt<<1|1])
        ans = query(L, R, rson, val);
    return ans;
}

void update(int rt, int l, int r, int val) {
    if(l==r) {
        tree[rt] = INF;
        return;
    }

    int mid = (l+r)>>1;
    if(val<=mid)
        update(lson, val);
    else
        update(rson, val);

    tree[rt] = max(tree[rt<<1], tree[rt<<1|1]);
}

int n, m;
int main() {
    int t; cin>>t;
    while(t--) {
        scanf("%d %d", &n, &m);
        int len = 0;
        for(int i=1;i<=n;i++) {
            scanf("%d", &arr[i]);
            id[arr[i]] = i;
            len = max(len, arr[i]);
        }

        id[++len] = INF;

        build(1, 1, len);

        int ans = 0;
        while(m--) {
            int op;
            scanf("%d", &op);
            if(op==1) {
                int pos;
                scanf("%d", &pos);
                pos = pos^ans;
                update(1, 1, len, arr[pos]);
            } else {
                int r, k;
                scanf("%d %d", &r, &k);
                r = r^ans, k = k^ans;

                ans = query(k, len, 1, 1, len, r);
                printf("%d\n", ans);
            }
        }
        memset(id, 0, sizeof(id));
    }    

    return 0;
}

原文地址:https://www.cnblogs.com/izcat/p/11423103.html

时间: 2024-10-30 10:15:46

CCPC 2019 网络赛 1002 array (权值线段树)的相关文章

HDU6706 CCPC 2019网络赛 huntian oy 推式子+杜教筛

CCPC 2019 网络赛 HDU 6706 huntian oy 标签 奇奇怪怪的数论结论 杜教筛 前言 我的csdn和博客园是同步的,欢迎来访danzh-博客园~ 简明题意 给定n,a,b,求: \[\sum_{i=1}^n\sum_{j=1}^igcd(i^a-j^a,i^b-j^b)[gcd(i,j)=1]\%(10^9+7)\] 思路 首先有一个结论: \[gcd(i^a-j^a,i^b-j^b)=i^{gcd(a,b)}-j^{gcd(a,b)}\] 上面的结论对于i,j互质是成立的

2019CCPC网络选拔赛 array(权值线段树)

2019CCPC网络选拔赛1002 HDU6703 题目大意: T个样例.给你一个长度为n的数组a,1≤a[i]≤n,a[i]各不相同.m个操作.ans初始为0.有两种操作: 操作1:给你t1.pos=t1^ans.把数组下标为pos的数,数值+1e7: 操作2:给你t2,t3.r=t2^ans,k=t3^ans.输出**与数组下标1~r的数不同**且**不小于k**的最小数.更新ans. 数据范围: 1≤T≤10,1≤n≤1e5,1≤m≤1e5,1≤a[i]≤n,a[i]各不相同,1≤pos≤

2019徐州网络赛 XKC&#39;s basketball team 线段树

网址:https://nanti.jisuanke.com/t/41387 题意: 大家好,我是训练时长两年半的个人练习生蔡徐坤,我的爱好是唱,跳,rap,篮球. 给出一段长度为$n,(n \leq 1e5)$的序列,对每一个数,求出它和它后面比它大$m$的数中间夹着的数的数量,没有输出$-1$. 题解: 直接建线段树,维护最大值,然后查询时对第$i$个数,搜索区间$[i,n]$之中大于$num[i]+m$的值的位置的最大值,具体操作是先限定区间,然后求出所有合法位置,取最大值,如果搜索不到则返

2019南昌网络赛-I. Yukino With Subinterval 线段树套树状数组

TMD...这题卡内存卡的真优秀... 所以以后还是别用主席树的写法...不然怎么死的都不知道... 树套树中,主席树方法开权值线段树...会造成空间的浪费...这道题内存卡的很紧... 由于树套树已经不需要持久化了,直接动态开点就完事了...用主席树方法开过不去,要么超内存,要么越界... 大概思路...这题要求的[L,R]区间内,满足x<=a[i]<=y的连续的段数, 这题大概是个套路题,我们很容易想到,我们把连续的区间变成单点,把一段区间,类似1 1 1 3 5 变成 1 0 0 3 5

[bzoj3932][CQOI2015]任务查询系统-题解[主席树][权值线段树]

Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行 ),其优先级为Pi.同一时间可能有多个任务同时执行,它们的优先级可能相同,也可能不同.调度系统会经常向 查询系统询问,第Xi秒正在运行的任务中,优先级最小的Ki个任务(即将任务按照优先级从小到大排序后取前Ki个 )的优先级之和是多少.特别的,如

P2234 [HNOI2002]营业额统计 (权值线段树)

P2234 [HNOI2002]营业额统计 题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是一项相当复杂的工作.由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题.经济管理学上定义了一种最小波动值来衡量这种情况: 当最小波动值越大

【BZOJ4605】崂山白花蛇草水 权值线段树+kd-tree

[BZOJ4605]崂山白花蛇草水 Description 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇Aleph的实力,他轻松地进了山东省省队,现在便是他履行诺言的时候了.蒟蒻Bob特地为他准备了999,999,999,999,999,999瓶崂山白花蛇草水,想要灌神犇Aleph.神犇Aleph求(跪着的)蒟蒻Bob不要灌他,由于神犇Aleph是神犇,蒟蒻Bob最终答应了他的请求,但蒟蒻Bob决定将计就计,也让神犇Aleph回答

【bzoj2161】布娃娃 权值线段树

题目描述 小时候的雨荨非常听话,是父母眼中的好孩子.在学校是老师的左右手,同学的好榜样.后来她成为艾利斯顿第二代考神,这和小时候培养的良好素质是分不开的.雨荨的妈妈也为有这么一个懂事的女儿感到高兴.一次期末考试,雨荨不知道第多少次,再次考了全年级第一名.雨荨的妈妈看到女儿100分的成绩单时,脸上又泛起了幸福的笑容,作为奖励,她给雨荨买了n个布娃娃.细心的雨荨发现,第i个布娃娃有一个耐心值P[i]以及一个魅力值C[i],并且还有能够忍受的耐心值的上限R[i]以及下限L[i].当一个布娃娃j满足L[

模板——权值线段树(逆序对)

Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 62455   Accepted: 23259 Description In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swappin