首页 > 其他分享 >Codeforces Round 890 (Div. 2) supported by Constructor Institute D. More Wrong(交互,分治)

Codeforces Round 890 (Div. 2) supported by Constructor Institute D. More Wrong(交互,分治)

时间:2023-08-27 19:55:11浏览次数:32  
标签:890 位置 Institute 最大值 supported mid int 区间 逆序

题目链接:https://codeforces.com/contest/1856/problem/D

 

大致题意:

这是一道交互题,有1~n的排列p,对于每次询问,你可以花费(R-L)2的代价去得到区间【L,R】之内的逆序对的个数,

你需要在5n2的代价内得到n的位置。

 

初步思路:

 

首先我们来思路,在什么时候,我们可以确定那个位置是n。

假设n的位置是p,那么我们可以知道

 

1:区间[l,p-1]和区间[l,p]的逆序对的个数是一样。因为p之前没有比n大的数。

2:区间[l,p+1],[l,p+2],,,,[l,n]他们的逆序对至少比前面多1。因为p的位置是n,所以每次至少会产生一个逆序对。

 

所以我们可以知道一个区间【L,R】的最大值定理,对于【L,R】,我们询问【L,L+1】,【L,L+2】,,,【L,R】,最后一个不增加的位置就是最大值所在处;

 

所以我们可以有一个暴力的想法,那就是枚举【1,2】,【1,3】,,,,【1,n】,最后不增加的位置就是n的位置。

但是,显然,这是过不了这道题的,他的代价为,1^2+2^2+....+(n-1)^2,接近n^3。

 

我们考虑一下怎么优化,想到求解逆序对的时候我们用到了分治,所以我们思考分治:

把区间 [l,r]分成 [l,mid]和 [mid+1,r]两个区间,分别求出两个区间的最大值位置pl​,pr,然后根据最大值定理,在这两个待选位置中求出整个 [l,r]的最大值位置。

具体方法就是层层递归分治,合并时判断 pr是否是区间[l,pr​] 的最大值位置,如果是,由于分治说明了pr​是区间[mid+1,r]最大值位置,则整个[l,r]的最大值位置就是 pr,否则,最大值位置就是 pl。

 

代价复杂度为:4n2,所以是可以通过的。

 

代码:

#include<bits/stdc++.h>

int ask(int L, int R) {
    if (L == R)return 0;
    std::cout << "? " << L << " " << R << std::endl;
    std::cin >> L;
    return L;
}

int GO(int L, int R) {
    if (R == L)return L;
    int mid = (R + L) / 2;
    int ansl = GO(L, mid), ansr = GO(mid + 1, R);
    int pre = ask(ansl, ansr - 1), suf = ask(ansl, ansr);
    return pre == suf ? ansr : ansl;
}

signed main() {
    int T;
    std::cin >> T;
    while (T--) {
        int n;
        std::cin >> n;
        int ans = GO(1, n);
        std::cout << "! " << ans << std::endl;
    }

    return 0;
}

 

可以看出,码量很短,是一道很妙的思维题呢!

标签:890,位置,Institute,最大值,supported,mid,int,区间,逆序
From: https://www.cnblogs.com/ACMER-XiCen/p/17645272.html

相关文章

  • ZLMediaKit实现拉取摄像头(海康协议)编码为H265并使用flv.js播放时提示:FLV:Unsupport
    场景开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130136245按照上面流程进行拉取摄像头的rtsp流并转流使用flv.js播放时提示:DemuxException:type-......
  • 跨版本迁移数据报错tables declared WITH OIDS are not supported
    瀚高数据库目录环境症状问题原因解决方案环境系统平台:Linuxx86-64RedHatEnterpriseLinux7版本:6.0症状迁移数据还原数据库时报错ERROR:tablesdeclaredWITHOIDSarenotsupported问题原因Postgresql12后取消了OIDS=TRUE的用法。解决方案修改脚本中的语句脚本中出现OIDS=T......
  • Spring batch document 2.1.8(supported by spring core 3.0)
    http://static.springsource.org/spring-batch/reference/html-single/index.html#configuringAJob SpringBatch-ReferenceDocumentationAuthorsLucasWard,DaveSyer,ThomasRisberg,RobertKasanicky,DanGarrette,WayneLund......
  • java.sql.SQLFeatureNotSupportedException: 这个 org.postgresql.jdbc.PgResultSet.g
    具体报错为:Errorattemptingtogetcolumn'DISEASENAME'fromresultset.Cause:java.sql.SQLFeatureNotSupportedException:这个org.postgresql.jdbc.PgResultSet.getNString(int)方法尚未被实作。;这个org.postgresql.jdbc.PgResultSet.getNString(int)方法尚未被实......
  • SSH连接问题“No supported authentication methods available”
    SSH连接问题1.问题描述:  接到同事上报,在使用Putty登录远程服务器时出现如下问题,“Nosupportedauthenticationmethodsavailable”详情如图。  通过沟通得知,服务器最初提供的认证方式为密钥登录,为了方便使用想改为密码登录,并且同事已经对/etc/ssh/sshd_config配置文件进......
  • Codeforces 890-891的一些题目的反思
    和atcoder一起出交互题是吧。D题回复逆序对个数,对于[L,R-1]和[L,R],如果R是最大值,那么对逆序对个数无影响。这样来确认某个数是不是最大的,然后递归扩展到整个区间这里看到逆序对,要想到归并排序、分治、递归、区间合并。。。。。查看代码//Problem:D.MoreWrong//Contest......
  • 遇到的问题----java Unsupported major.minor version 51.0
     Unsupportedmajor.minorversion51.0不同的JDK版本使用的major.minor不同,所以会导致这个错误。编译器运行的jdk选择版本和使用的jdk版本号应该对应。解决起来也很方便:打开exclipse中项目上的属性—javacompiler–选择一个合适的版本后重新编译即可。具体步骤解决:项目------......
  • Codeforces Round 890 (Div. 2) supported by Constructor Institute A-E1
    An=50非常小所以直接暴力枚举枚举每次把某个数以下的全部减完然后看一下是否上升就行 https://codeforces.com/contest/1856/submission/217275334  B题直接贪心前面优先放最小的最后一个放最大的 然后如果重复了就到前面去看能不能调整一下 https://codeforces.......
  • Codeforces Round 890 (Div. 2)
    A.TalesofaSort题目大意Alphenhasanarrayofpositiveintegers\(a\)oflengthn.Alphencanperformthefollowingoperation:Forall\(i\)from1ton,replace\(a_i\)with\(\max(0,a_i−1)\).Alphenwillperformtheaboveoperationuntil\(......
  • Codeforces Round #890 Div.2
    link题号:1856A~E2A题面:给定一个正整数\(n\)和一个长度为\(n\)的序列\(a\),重复执行以下操作直至\(a\)序列单调不减:\(\forall1\lei\len\),\(a_i=\max(a_i-1,0)\)。求一共需要执行多少次操作。多测,共\(t\)组数据。对于所有数据,保证\(1\let\le500\)......