$n \leq 1e5$,$x \leq 1e9$。

1e9呵呵,暴力处理$a_n$的前几项直到1e9。然后处理出差的数列,每次在这里面找,找得到就回答,找不到,那有贡献的只有$a_i-a_{i-1},a_i>1e9$,并且是越来越大的,那在原有的里面二分一下看要补几个即可。

注意$Max=1e9+多一点$,否则会少算$a_{56}-a_{54}$等!

 #include<stdio.h>
#include<string.h>
//#include<iostream>
#include<algorithm>
using namespace std; #define LL long long
int qread()
{
char c; int s=,t=; while ((c=getchar())<'' || c>'') (c=='-') && (t=-);
do s=s*+c-''; while ((c=getchar())>='' && c<=''); return s*t;
} // int tot;
#define maxn 233333
int a[maxn];
struct Node
{
int x,y,v;
bool operator < (const Node &b) const {return v<b.v;}
}b[maxn]; int lb; int main()
{
int Max=,n=;
a[]=; a[]=;
b[++lb]=(Node){,,};
for (n=;;n++)
{
if (n&) a[n]=a[n-]<<; else
{
for (int k=;k<=lb;k++) if (b[k].v!=b[k-].v+) {a[n]=b[k-].v+; break;}
if (!a[n]) a[n]=b[lb].v+;
a[n]+=a[n-];
}
for (int i=;i<n;i++) b[++lb]=(Node){n,i,a[n]-a[i]};
sort(b+,b++lb);
if (a[n]>Max) break;
}
int m=qread();
while (m--)
{
int x=qread(),y;
if (b[y=lower_bound(b+,b++lb,(Node){,,x})-b].v==x) printf("%d %d\n",b[y].x,b[y].y);
else
{
int p=x-(y-);
printf("%d %d\n",n+p*-,n+p*-);
}
}
return ;
}

最新文章

  1. C# 程序中嵌入百度地图
  2. 如何下载Github单个文件(Windows平台)
  3. Android动画效果之Property Animation进阶(属性动画)
  4. jQuery.lazyload详解
  5. Openstack Neutron OVS ARP Responder
  6. python基础之常用模块以及格式化输出
  7. jQuery 预习视频
  8. Java 8 VM GC Tuning Guide Charter2
  9. 使用solrj操作solr索引库,solr是lucene服务器
  10. linux查看占用内存/cpu最高的进程情况
  11. ruby中输入命令行编译sass(ruby小白)
  12. redis数据类型和应用场景
  13. js 判断当前是什么浏览器
  14. python调用c代码
  15. 2015 多校联赛 ——HDU5305(搜索)
  16. 使用VS的生成事件命令行指令将生成的exe,dll文件复制到指定文件夹中
  17. es 模板
  18. windows reload()
  19. mod_pagespeed
  20. jQuery插件——可以动态改动颜色的jQueryColor

热门文章

  1. Sublime Text3括号配对与代码包围效果BracketHighlighter
  2. HDU 6069 Counting Divisors(区间素数筛法)
  3. PWN题搭建
  4. python-DB模块
  5. ios之NSNumber
  6. Mac 输入法小技巧
  7. javascript变量名命名规则
  8. 【Java_多线程并发编程】基础篇—线程状态及实现多线程的两种方式
  9. Cookies和Session的区别和理解
  10. numpy模块(对矩阵的处理,ndarray对象)