传送门

文章目录

  • 题意:
  • 思路:

题意:

给你一个序列ppp长度nnn,每次可以执行两个种询问:
t=1max(min(x,pi),min(x+1,pj))t=1\ \ max(min(x,p_i),min(x+1,p_j))t=1  max(min(x,pi​),min(x+1,pj​))
t=2min(max(x,pi),max(x+1,pj))t=2\ \ min(max(x,p_i),max(x+1,p_j))t=2  min(max(x,pi​),max(x+1,pj​))
询问操作不能超过⌊3∗n2⌋+30\left \lfloor \frac{3*n}{2} \right \rfloor+30⌊23∗n​⌋+30次。
n<=1e4n<=1e4n<=1e4

思路:

交互题看到操作不能超过⌊3∗n2⌋+30\left \lfloor \frac{3*n}{2} \right \rfloor+30⌊23∗n​⌋+30的时候容易想到通过⌊n2⌋\left \lfloor \frac{n}{2} \right \rfloor⌊2n​⌋次操作询问出某个值,让后再通过n−1n-1n−1次操作询问出所有值,下面考虑如何询问某个值。
其实1,21,21,2操作是差不多的,我们这里利用第一个操作询问出来nnn的位置。从111开始,让x=n−1x=n-1x=n−1,每次询问相邻两项,如果返回值为nnn的话,说明i+1i+1i+1的位置是nnn,如果是n−1n-1n−1的话,将i,i+1i,i+1i,i+1的位置调换一下再询问一次看是否为nnn。当nnn为奇数的时候,如果最后都没找到nnn的位置,那么说明nnn的位置在最后一位。
现在知道nnn的位置为pospospos,我们可以通过第二个操作询问出来所有值,我们让pj=pos,x=1p_j=pos,x=1pj​=pos,x=1,让后让pip_ipi​为当前询问的位置,返回值即为当前位置的值。
这样问题就完美解决啦,总询问次数不会超过⌊n2⌋+n+1\left \lfloor \frac{n}{2} \right \rfloor+n+1⌊2n​⌋+n+1

//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<assert.h>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
int a[N];int query(int op,int i,int j,int x) {printf("? %d %d %d %d\n",op,i,j,x); fflush(stdout);int ans; scanf("%d",&ans);return ans;
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);int _; scanf("%d",&_);while(_--) {scanf("%d",&n);int pos=-1;for(int i=1;i<=n-1;i+=2) {int now=query(1,i,i+1,n-1);if(now==n) {pos=i+1;break;}else if(now==n-1) {now=query(1,i+1,i,n-1);if(now==n) {pos=i;break;}}}if(pos==-1) pos=n;a[pos]=n;for(int i=1;i<=n;i++) {if(i==pos) continue;int now=query(2,i,pos,1);a[i]=now;}printf("! "); fflush(stdout);for(int i=1;i<=n;i++) printf("%d ",a[i]),assert(a[i]<=n),fflush(stdout);puts(""); fflush(stdout);}return 0;
}
/**/

Codeforces Round #720 (Div. 2) C. Nastia and a Hidden Permutation 交互相关推荐

  1. Codeforces Round #719 (Div. 3)/ Codeforces Round #720 (Div. 2)

    A. Do Not Be Distracted! 题意: 一件事情一但开始,只能做完才能做别的事,当出现一件事不连续出现时,教师会怀疑 题目: Polycarp has 26 tasks. Each ...

  2. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  3. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  4. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  5. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  6. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  7. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

  8. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

  9. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

最新文章

  1. HTML5 canvas drawImage() 方法记录
  2. linux shell 判断字符串是否在数组中
  3. 南通工学院计算机系97顾月,南通大学电气工程学院
  4. window7 ubuntu12.04 Opensuse13.04 三系统安装
  5. 在线音乐用户寄望用爱发电,资本不愿无米之炊
  6. 放开那三国3服务器维护,放开那三国3新服铤而走险开服时间表_放开那三国3新区开服预告_第一手游网手游开服表...
  7. 糊涂的教授【拓扑排序】
  8. ^_^直接用脚本分割日志,不用工具。
  9. Spring-tx-TransactionStatus接口(savepoint)
  10. org manual翻译--3.6 Org-Plot
  11. 非常值得收藏的15个 Google 高级搜索技巧
  12. 基于FPGA的CIC滤波器设计(1)
  13. ubuntu 开发java_Ubuntu下搭建java开发环境
  14. 机动目标运动分析——IMM篇
  15. Android获取局域网所有设备的ip地址
  16. ios上查看html源码,如何在ios手机端的Safari浏览器中“查看网页源代码”
  17. 无法解压文件请重新启动计算机,为什么rar文件无法解压,显示数据错误,文
  18. SSL安全连接是什么意思?HTTPS安全登录指的什么?
  19. 自动驾驶感知——红外传感器
  20. 【并行计算】OpenMP编程和MPI编程简单教程

热门文章

  1. 未检测到正确安装的网络适配器_电脑网络适配器有感叹号怎么解决?
  2. 忍“乳”负重,身材好的女孩子究竟有多不容易?我从科学的角度算出来了……...
  3. 15个只有数学老师懂的泪流满面瞬间
  4. 图像还可以这样玩!如何用OpenCV处理图像?
  5. 每日一笑 | 在俄罗斯人眼里,没有什么是胶带解决不了的
  6. lcd屏幕抖动_电视屏幕面板大科普!买电视之前必看!
  7. http服务器异步响应,python – 具有异步响应的Twisted http服务器,其中请求必须等待数据变为可用或超时...
  8. 超详细图解!【MySQL进阶篇】MySQL架构原理
  9. 服务器运维监控指标,运维体系~指标监控~Prometheus监控告警与日志
  10. linux accept过程,Linux协议栈accept和syn队列问题