首页 > 其他分享 >WC2024 水镜

WC2024 水镜

时间:2024-02-06 23:12:53浏览次数:31  
标签:水镜 ma int ll long WC2024 using define

考虑一张图,如下建边:

  • \(h_i<h_{i+1}\):\((i,0)\to (i+1,0)\)

  • \(h_i>h_{i+1}\):\((i,1)\to (i+1,1)\)

  • \(h_i+h_{i+1}<L\):\((i,0)\to (i+1,1)\)

  • \(h_i+h_{i+1}>L\):\((i,1)\to (i+1,0)\)

所以说边只会改变 \(n\) 次,一共 \(2n\) 条边。

对于每张图需要求出 \(\sum (f_u-u+1)\) 即可,其中 \(f_u\) 是每张图中 \(u\) 向右最远的扩展点。

尝试维护这个东西。

会发现 \(00\) 或 \(11\) 一定存在,将 \(L\) 从小往大扫描,于是一定是从 \(10\to 01\)。

于是一定可以钦定出若干个 \(i\) 一定是 \(0\),\(i\) 一定是 \(1\) 这样的,这样如果存在矛盾就可以确定当前每一个点的最远延伸距离,可以做到 \(O(n^2)\)。

考虑无解的情况,共三种:

  • \(h_i=h_{i+1}\),\(h_i+h_{i+1}=L\),也就意味着对于 \(h_i=h_{i+1}\),\(L\not=h_i+h_{i+1}\);

  • \(h_{i-1}<h_i\),\(h_{i-1}+h_{i}>L\),\(h_i>h_{i+1}\),\(h_{i}+h_{i+1}>L\);

  • \(h_{i-1}>h_i\),\(h_{i-1}+h_{i}<L\),\(h_i<h_{i+1}\),\(h_{i}+h_{i+1}<L\);

容易发现后两种都对应一个关于 \(L\) 的取值范围,第一种可以不用管,同时这个题 \(r\) 肯定关于 \(l\) 单调,于是枚举 \(l\) 之后二分即可,对于取值范围可以用 ST 表维护,\(O(n\log n)\)。

不得不说,我 WC 打得真唐,希望省选别这样发挥,不然真寄了。

/*
Author: cnyz
世界があたしを拒んでも今 愛の唄 歌わせてくれないかな
*/
#include<bits/stdc++.h>
using namespace std;

using db=double;
using ll=long long;
using vi=vector<int>;
using pii=pair<int,int>;
using ull=unsigned long long;

#define fi first
#define se second
#define gc getchar
#define pb emplace_back
#define mkp make_pair
#define push emplace
#define sz(a) (int)a.size()
#define all(p) p.begin(),p.end()
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define ROF(i,a,b) for(int i=a;i>=b;i--)
#define ppc(x) __builtin_popcount(x)
#define clz(x) __builtin_clz(x)

bool Mbe;

void chkmax(int &x,int y) {if(x<y) x=y;}
void chkmin(int &x,int y) {if(x>y) x=y;}
void chkmax(ll &x,ll y) {if(x<y) x=y;}
void chkmin(ll &x,ll y) {if(x>y) x=y;}

const int N=5e5+5;
const ll inf=1e13;
ll h[N],mi[N][20],ma[N][20];
ll qma(int l,int r) {
    int k=__lg(r-l+1);
    return max(ma[l][k],ma[r-(1<<k)+1][k]);
}
ll qmi(int l,int r) {
    int k=__lg(r-l+1);
    return min(mi[l][k],mi[r-(1<<k)+1][k]);
}
void solve() {
    int n; cin>>n;
    FOR(i,1,n) cin>>h[i];
    FOR(i,1,n) mi[i][0]=inf,ma[i][0]=-inf;
    FOR(i,2,n-1) {
        if(h[i]>=h[i+1]&&h[i]>=h[i-1]) ma[i][0]=h[i]+min(h[i-1],h[i+1]);
        if(h[i]<=h[i+1]&&h[i]<=h[i-1]) mi[i][0]=h[i]+max(h[i-1],h[i+1]);
    }
    FOR(j,1,19) FOR(i,1,n-(1<<j)+1)
        ma[i][j]=max(ma[i][j-1],ma[i+(1<<(j-1))][j-1]),
        mi[i][j]=min(mi[i][j-1],mi[i+(1<<(j-1))][j-1]);
    ll o=0;
    FOR(i,1,n-1) {
        int R=i+1,l=i+2,r=n;
        while(l<=r) {
            int mid=(l+r)>>1;
            if(qma(i+1,mid-1)<qmi(i+1,mid-1)) l=mid+1,R=mid;
            else r=mid-1;
        }
        o+=R-i;
    }
    cout<<o<<"\n";
}

bool Med;
int main() {
    ios::sync_with_stdio(false),cin.tie(0);
    // fprintf(stderr, "%.3lf MB\n", (&Med - &Mbe) / 1048576.0);
    int T=1;
    while(T--) solve();
    // fprintf(stderr, "%d ms\n", int(1e3 * clock() / CLOCKS_PER_SEC));
}

标签:水镜,ma,int,ll,long,WC2024,using,define
From: https://www.cnblogs.com/cnyzz/p/18010449

相关文章

  • PKUWC2024游记
    省流:136+136Day-?模拟赛。一直犯唐氏错误,但赋值写成加能过样例是怎么回事呢。SNOID1T3用dinic跑不过去必须用二分图边染色又是怎么想到的(Kubic:二分图匹配总不会卡dinic)。GDKOID2T3使用分治和vector套vector又被卡了45pts,rp-=inf。Day-1看了一圈拉丁方题解,好像有用神秘分治......
  • WC2024 水镜
    洛谷传送门WC2024被打爆了,呜呜。我赛时会这题\(8\)分指数级暴力,哈哈。真不知道自己在干嘛。下文令\(T=2L\)。考虑如何判定一个序列\(a\)是否合法。考虑先枚举一个\(T\)。因为要求\(r_i<r_{i+1}\),考虑讨论相邻两项的取值:若\(a_i<a_{i+1}\)则\(r_i=a_i,......
  • WC2024 游记
    2月1日测试开场读三道题,题好长!T1看起来是数数,T2是神秘构造,T3还是数数。开赛后15分钟开始想T1。直接做好像不太可做啊,然后立刻想到了拆贡献看看。发现拆贡献后问题变成了背包问题,可以\(\mathcalO(nT)\)解决。看完数据范围有点惊讶,我的做法能拿满分!在去年,金牌分数线不......
  • THUWC2024 游记
    标题已经过和谐。内容已经过和谐。Day0等待cool_milo。他来了。检查身份证和现金。思来想去决定携带红楼梦,然而并没有什么用。走到一中后门,等待教练打印准考证。打印好了,绕远路前往小龙坎站乘坐一号线。形如初中生秋游。经过换乘抵达黄花园,出站看见巴蜀中学国际部,非常气......
  • pkuwc2024 & wc2024
    虽然去年pkusc拿过优异了,但是还是去旅游了一下。不想按照严格的时间线写了,想到什么写什么吧。坐高铁去,发现zph和miao22也在这一车次,但是和被8-9分割了。CQ的地铁感觉没有几段是在地下的,全是在天上跑,还有从楼里穿过的,还是比传统地铁好玩的。但下来就不好玩了,拎着箱子......
  • THUWC2024游寄
    THUWC2024游寄\(day\-1\)从学校坐车到巴蜀,第一次参加这种全国赛就碰上了在自己省举办,不能去外省玩,伤心,几百年没出过省了,不过如果去外省的费用堪忧,节省路费和食宿费了,发现巴蜀的大门居然是开放的,震惊,这样学生不是可以随意进出了???发现大门旁边还有一个银行和很多的饭店,更震惊了!这......
  • WC2024 Lectures
    大概只会有例题题解。目录P8263「YnoiEasyRound2020」TEST_8P8263「YnoiEasyRound2020」TEST_8Tag:S-持久化WBLT。使用WBLT来维护整个括号序列,则三四操作已经做完了。考虑一二操作,使用倍增的方式处理出复制\([l,r]\)区间的结果,于是可以在\(O(\logk)\)的复杂度内......
  • THUWC2024 游记
    前言S爆炸,去不了WC,呜呜呜。好在混给了个THUWC的名额,那还是去玩玩吧。day0t营小分队:我,@柳易辰,@tianhangj坑老师重回战场!其他高二的神仙都有约了。10点的飞机,川航。想买机上wifi,家长不让/fn/fn/fn飞机餐差评。下飞机打车直奔霸树。一进去就看见了zxx!但是我社恐......
  • WC2024 游记
    Day0(01.29)因为之前pkuwc就在育才,所以早上直接从酒店过来了。然后过来了就一直颓颓颓……育才的食堂确实比我们学校好太多了(不排除是只有这几天好吃,不过谁关心呢)但是寝室只有走廊尽头有地方充电,那里人满为患。这点感觉不是很好,不过也能理解,因为学校正常情况下是不让带电子设......
  • THUWC2024 游记
    Day01月25号下午从一中出发,一号线换乘二号线到黄花园站,然后走到了巴蜀本部。在签到处领到了一个包,后来发现里面有一本《图解人工智能》的科普书,一只鼠标和一支数控笔,作为第一次参加线下冬令营的菜鸡,表示很惊喜。下午唯一美中不足的是饭票25元/张,只能说不愧是巴蜀。晚上吃......