首页 > 其他分享 >USACO 2024 Season

USACO 2024 Season

时间:2024-02-27 16:00:49浏览次数:24  
标签:res leftarrow int Season USACO 2024 max query define

2024JAN

Silver

Cowmpetency

线段树可以有效减少思维含量。建议评分:蓝。

\[x=\max _{k=1}^i a_k \]

\[y=\max _{k=i+1}^{j-1} a_k \]

则 FJ 的限制 \((i, j)\) 可以表示为 \(x\ge y\) 并且 \(x<a_j\)。

将所有限制按 \(i\) 从小到大排序后,对每个限制 \((i, j)\) 执行以下流程。

  1. \(x<y\)。如果 \(1\sim i\) 全部填完了,则无解。否则,为了字典序最小,找到最靠近 \(i\) 的没填的下标 \(pre(i)\),\(a_{pre(i)}\leftarrow y\),\(x\leftarrow y\)。
  2. \(a_j\) 已经填数但 \(a_j\le x\)。一定无解。
  3. \(a_j\) 没有填数。如果 \(1\sim i\) 全都没有填数,\(a_j\leftarrow 2\),不然 \(a_j\leftarrow x+1\)。

然后扫描一遍整个 \(a\) 数组,如果 \(a_i>c\) 则无解,如果 \(a_i\) 没有填则 \(a_i\leftarrow 1\)。

最后复查一遍,输出答案。线段树需要支持单点修改、区间查询最大值。

// Title:  Cowmpetency
// Source: USACO24JAN Silver
// Author: Jerrywang
#include <bits/stdc++.h>
#define F first
#define S second
#define pii pair<int, int>
#define ll long long
#define rep(i, s, t) for(int i=s; i<=t; ++i)
#define debug(x) cout<<#x<<":"<<x<<endl;
const int N=300010;
using namespace std;

int n, T, C, a[N], pre[N]; pii q[N];
struct node
{
    int l, r, x;
} t[N<<4];
#define lc p<<1
#define rc p<<1|1
void build(int p, int l, int r)
{
    t[p]={l, r, a[l]};
    if(l==r) return;
    int m=l+r>>1;
    build(lc, l, m), build(rc, m+1, r);
    t[p].x=max(t[lc].x, t[rc].x);
}
int query(int p, int l, int r)
{
    if(l<=t[p].l && t[p].r<=r) return t[p].x;
    int m=t[p].l+t[p].r>>1, res=0;
    if(l<=m) res=max(res, query(lc, l, r));
    if(r>m)  res=max(res, query(rc, l, r));
    return res;
}
void modify(int p, int i, int x)
{
    if(t[p].l==t[p].r) {t[p].x=x; return;}
    int m=t[p].l+t[p].r>>1;
    if(i<=m) modify(lc, i, x); else modify(rc, i, x);
    t[p].x=max(t[lc].x, t[rc].x);
}
#define err {puts("-1"); return;}
void solve()
{
    scanf("%d%d%d", &n, &T, &C);
    rep(i, 1, n)
    {
        scanf("%d", a+i);
        if(a[i]) pre[i]=pre[i-1]; else pre[i]=i;
    }
    build(1, 1, n);
    rep(i, 1, T) scanf("%d%d", &q[i].F, &q[i].S);
    sort(q+1, q+T+1);
    rep(k, 1, T)
    {
        int i=q[k].F, j=q[k].S;
        int x=query(1, 1, i), y=query(1, i+1, j-1);
        if(x<y)
        {
            if(!pre[i]) err
            x=a[pre[i]]=y, modify(1, pre[i], y);
        }
        if(a[j] && a[j]<=x) err
        if(!a[j])
            a[j]=x?x+1:2, modify(1, j, a[j]);
    }
    rep(i, 1, n)
    {
        if(a[i]>C) err
        if(!a[i]) a[i]=1, modify(1, i, a[i]);
    }
    rep(k, 1, T)
    {
        int i=q[k].F, j=q[k].S;
        int x=query(1, 1, i), y=query(1, i+1, j-1);
        if(!(x>=y && a[j]>x)) err
    }
    rep(i, 1, n) printf("%d%c", a[i], " \n"[i==n]);
}

int main()
{
    #ifdef Jerrywang
    freopen("in.txt", "r", stdin);
    #endif
    int T; scanf("%d", &T);
    while(T--) solve();
    
    return 0;
}

标签:res,leftarrow,int,Season,USACO,2024,max,query,define
From: https://www.cnblogs.com/jerrywang2009/p/18037038

相关文章

  • 《产品需求分析与管理》(深圳2024年3月22-23日)
    【课程背景】客户的需求不断变化,如何快速高效地推出满足客户需求、具有差异化优势和竞争优势的产品,并最终获得市场的成功,是企业的核心问题。目前国内许多科技型企业在产品需求管理方面存在如下问题:产品开发没有实现市场驱动,是“闭门造车”,关注技术而不关心客户;产品开发出来后......
  • 2024牛客寒假算法基础集训营1(补题)
    目录ABCDEFGHIKLAn的范围很小暴力直接\(O(n^3)\)直接做就行。我还傻的统计了一下前后缀,不过怎么写都行这道题。#include<bits/stdc++.h>#defineintlonglong#definerep(i,a,b)for(inti=(a);i<=(b);++i)#definefep(i,a,b)for(inti=(a);i>=(b);--i)#d......
  • 2024-02-27-物联网系统编程(7- 共享内存)
    7.共享内存7.1共享内存概述​共享内存允许两个或者多个进程共享给定的区域共享内存的特点共享内存是进程间共享数据的一种最快的方法;一个进程向共享的内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。使用共享内存要注意的是多个进程之......
  • 20240219
    State的使用在Compose中,我们可以使用State来管理数据,State是一个可以被观察的数据,当数据发生变化时,State会通知所有的观察者。我们可以使用State来管理UI的状态,比如显示和隐藏组件、改变组件的样式等。什么时候使用State当我们需要管理UI的状态时,我们可以使用State。比如,当我们......
  • 20240218
    记账本App主页页面的绘制记账本App的主页界面绘制@OptIn(ExperimentalMaterial3Api::class)@ComposablefunExpenseTrackerApp(appViewModel:ExpenseTrackerViewModel=viewModel()){valappUiStatebyappViewModel.uiState.collectAsState()Box(modifie......
  • 【2024-02-18】连岳摘抄
    23:59在即将远行和改变生活方式的时刻,善于反省的人总怀着一种严肃的心情。每逢这样的时刻,人们通常是检查过去和计划未来。                                                ......
  • 【2024-02-17】连岳摘抄
    23:59尽管如此,还要坚持,希望就像盐巴一样,没有营养,但它给面包增添了味道。                                                 ——若泽·萨拉马戈强者可以制定规则,强者......
  • 2024-02-27-物联网系统编程(6-消息队列)
    6.消息队列6.1IPC对象​除了最原始的进程间通信方式信号、无名管道和有名管道外,还有三种进程间通信方式,这三种方式称之为IPC对象:消息队列、共享内存、信号灯集。​IPC对象也是在内核空间开辟区域,每一种IPC对象创建好之后都会将其设置为全局,并且会给其分配一......
  • 2024 省选复习 (updating)
    前言快省选了,在复习,但是不知道干什么。所以就写点东西吧。就是瞎写写,所以可能有很多错误,如果发现了欢迎指出。常见错误&注意事项数组不能开大,也不能开小题目要求什么千万不能读错,最好手算一下样例算法复习树状数组进阶P6619原本是树状数组二分的模板题,但是用......
  • 20240226
    非常意识流的日记,精神状态极度不佳下打出来的。模拟赛垫底,不过是意料之中的,没造成太大影响。下午也很正常,一直在硬刚Border,不过有些微疲倦。晚自习就开始颓废了,不想学习。然后下去散步的时候唐了,成小丑了,破防了。当时看到青蛙的博客时真正体会到了什么是「整个人都麻了」的......