bzoj1136: [POI2009]Arc

Description

给定一个序列{ai | 1 <= ai <= 1000000000 且 1 <= i <= n 且 n <= 15000000}和一个整数 k (k <= n 且 k <= 1000000),求出a的一个长度为k的子序列{a[bi]}满足: (1) 1 <= b1 <= b2 <= ... <= bk (2) 在满足(1)的情况下 {a[b1], a[b2], ... , a[bk]} 字典序最大。

Input

第一行一个数k,以下一行,为序列ai。以一个单独的0结束

Output

k行,每行一个数,其中第i行为a[bi]。

Sample Input

12
5 8 3 15 8 0

Sample Output

12
15
8

题解:

http://blog.csdn.net/popoqqq/article/details/44812723

code:

  1 #include <stdlib.h>
  2 #include <stdio.h>
  3 #include <time.h>
  4
  5 #define MAGIC_BEGIN -435634223
  6 #define MAGIC_END -324556462
  7
  8 #define MIN_K 1
  9 #define MAX_K 1000000
 10 #define MAX_N 15000000
 11 #define MIN_A 1
 12 #define MAX_A 1000000000
 13 #define MIN_TYP 1
 14 #define MAX_TYP 3
 15 #define MIN_PAR 0
 16 #define MAX_PAR 1000000000
 17
 18 #define ERROR 0
 19 #define CORRECT 1
 20
 21 #define unlikely(x) __builtin_expect(!!(x), 0)
 22
 23 static int init = 0; // czy zostala juz wywolana funkcja inicjuj()
 24 static int lib_n; // ile biblioteka podala juz liczb
 25 static int con_k; // ile zawodnik podal liczb
 26
 27 static int N, K, A, TYP, PAR; // parametry testu wczytywane z pliku
 28 static int bre, len_sub, bou, is_end; // zmienne pomocnicze
 29
 30 static int rand2_status = 198402041;
 31
 32 static inline int rand2(int a, int b){
 33   rand2_status = rand2_status * 1103515245 + 12345;
 34   int x = rand2_status;
 35   if (x < 0) x = -x; // -2^31 sie nie zdarza :D
 36   x >>= 1;
 37   x = a + x % (b - a + 1);
 38   return x;
 39 }
 40
 41 /* test losowy */
 42 static inline int random_test()
 43 {
 44     return rand2(1, A);
 45 }
 46
 47 /* test z dlugim podciagiem nierosnacym */
 48 static inline int decreasing_test()
 49 {
 50     int tmp;
 51     if(bre == 0) {
 52         bre = rand2(0, (N - lib_n + 1 - len_sub));
 53         tmp = A;
 54         A -= rand2(0, (A - 1) / len_sub);
 55         len_sub--;
 56     }
 57     else {
 58         bre--;
 59         tmp = rand2(1, A);
 60     }
 61     return tmp;
 62 }
 63
 64 /* test z dlugim podciagiem niemalejacym */
 65 static inline int increasing_test()
 66 {
 67     return bou - decreasing_test();
 68 }
 69
 70 static void finish(int res, char *com)
 71 {
 72     if(res == ERROR)
 73         printf("%s\n", com);
 74     exit(0);
 75 }
 76
 77 /* Inicjuje dane wejsciowe i zwraca liczbe projektow */
 78 int inicjuj()
 79 {
 80     if(init == 1)
 81         finish(ERROR, "Program zawodnika moze wywolac funkcje inicjuj tylko raz!!!");
 82     init = 1;
 83     scanf("%d", &K);
 84     if (K > 0){
 85       TYP = 0;
 86       N = MAX_N + 2;
 87       return K;
 88     }
 89     int magic_begin, magic_end;
 90     scanf("%d%d", &magic_begin, &TYP);
 91     if(magic_begin != MAGIC_BEGIN || TYP < MIN_TYP || TYP > MAX_TYP)
 92         finish(ERROR, "Program zawodnika nie moze korzystac z stdin!!!");
 93     scanf("%d%d%d%d", &N, &K, &A, &PAR);
 94     if(N < 1 || N > MAX_N || N < K || K > MAX_K || A < MIN_A || A > MAX_A
 95         || PAR < MIN_PAR || PAR > MAX_PAR)
 96         finish(ERROR, "Program zawodnika nie moze korzystac z stdin!!!");
 97     scanf("%d", &magic_end);
 98     if(magic_end != MAGIC_END)
 99         finish(ERROR, "Program zawodnika nie moze korzystac z stdin!!!");
100     con_k = 0;
101     lib_n = 0;
102     is_end = 0;
103     if(TYP == 2 || TYP == 3) {
104         len_sub = PAR;
105         bre = 0;
106     }
107     if(TYP == 2)
108         bou = A--;
109     return K;
110 }
111
112 /* Sluzy do wczytania ciagu reprezentujacego jakosci projektow */
113 int wczytaj()
114 {
115     if(unlikely(init == 0))
116         finish(ERROR, "Program zawodnika nie wywolal funkcji inicjuj!!!");
117     if(unlikely(lib_n > N || is_end == 1))
118         finish(ERROR, "Program zawodnika wywolal funkcje wczytaj po otrzymaniu informacji o koncu ciagu!!!");
119     if(unlikely(lib_n == N))
120         return 0;
121     lib_n++;
122     switch (TYP) {
123       case 0:
124         scanf("%d", &A);
125         if(A == 0)
126           is_end = 1;
127         return A;
128         break;
129       case 1: return random_test(); break;
130       case 2: return increasing_test(); break;
131       case 3: return decreasing_test(); break;
132       default:
133               finish(ERROR, "Nieznany typ testu");
134     }
135     return -1;
136 }
137
138 /* Sluzy do wypisania wyznaczonego podciagu */
139 void wypisz(int jakoscProjektu)
140 {
141     if(init == 0)
142         finish(ERROR, "Program zawodnika nie wywolal funkcji inicjuj!!!");
143     printf("%d\n", jakoscProjektu);
144     if(++con_k == K)
145         finish(CORRECT, "");
146 }
147 #include<cstdio>
148 #include<iostream>
149 #include<cmath>
150 #include<cstring>
151 #include<algorithm>
152 using namespace std;
153 char ch;
154 bool ok;
155 void read(int &x){
156     for (ok=0,ch=getchar();!isdigit(ch);ch=getchar()) if (ch==‘-‘) ok=1;
157     for (x=0;isdigit(ch);x=x*10+ch-‘0‘,ch=getchar());
158     if (ok) x=-x;
159 }
160 const int maxk=1000010;
161 int k,n,x,a[maxk];
162 struct Data{
163     int head,tail,val[maxk];
164     void init(){head=1,tail=0;}
165     void push(int v){
166         while (head<=tail&&val[tail%maxk]<v) tail--;
167         if (tail-head+1<k) val[(++tail)%maxk]=v;
168     }
169     void pop(){head++;}
170     int front(){return val[head%maxk];}
171 }que;
172 int main(){
173     que.init(),k=inicjuj();
174     for (n=0;n<k;n++) a[n]=wczytaj(); n--;
175     while (x=wczytaj(),x){
176         a[(++n)%maxk]=x;
177         que.push(a[(n-k)%maxk]);
178     }
179     for (int i=k-1;i>=0;i--) que.push(a[(n-i)%maxk]),wypisz(que.front()),que.pop();
180     return 0;
181 }
时间: 2024-12-26 02:24:55

bzoj1136: [POI2009]Arc的相关文章

ARC

ARC是什么 ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting).简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了. 该机能在 iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2 可以使用该机能.简单地理解ARC,就是通过指定的语法,让编译器(LLVM 3.0)在编译代码时,自动生成实例的引用计数管理部分代码.有一点,ARC并不是G

Block的引用循环问题 (ARC &amp; non-ARC)

Block实现原理 首先探究下Block的实现原理,由于Objective-C是C语言的超集,既然OC中的NSObject对象其实是由C语言的struct+isa指针实现的,那么Block的内部实现估计也一样,以下三篇Blog对Block的实现机制做了详细研究: A look inside blocks: Episode 1 A look inside blocks: Episode 2 A look inside blocks: Episode 3 虽然实现细节看着头痛,不过发现Block果然

MRC与ARC混合开发配置

iOS4.1后,默认为ARC模式,ARC实质上通过编译器特性实现的,只需简单修改下文件配置即可实现. 1.要切换至MRC需要选中当前Project,选择Build Settings,查询框内键入auto,查找到Objective-C Automatic Reference Counting ,将YES选成NO即可.见下图: 2.还可以灵活选择单一或几个文件设置成ARC模式,方法是选择targets,找到Compile Sources,选择所需文件,将flags ,键入-fobjc-arc即可.见

iOS ARC机制

iOS提供了ARC功能,很大程度上简化了内存管理的代码. 1.ARC的本质: 采用ARC后,iOS开发者完全可以抛弃之前繁琐的内存管理机制.在开启ARC的情况下,编译器会自动的在程序的正确位置隐式的插入retain,release和autorelease等.特别明确,ARC只是objective-C编译器的特征,所有ARC相关处理都会发生在构建应用程序的时候,这和内存垃圾回收机制不同. 2.基本的ARC使用规则 1)代码中不能使用retain,release,autorelease等: 2)不能

黑马程序员--ARC

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- ARC的判断准则:只要没有强指针指向的对象,就会释放对象 ARC特点: 1>不允许调用release,release,retainCount 2>允许重写dealloc,但是不允许调用[super dealloc] 3>@property的参数 * strong :成员变量时强指针,(适用于OC对象类型) * weak :  成员变量是若指针,(适用于OC对象) * assign: 适

iOS ARC与MRC混编的一些解决方法

1. ARC & MRC 混合开发 在项目开发中,遇到使用MRC开发的第三方库怎么办? 例如:ASI 1> 尝试使用Xcode的转换工具(失败率比较高) 2> 在编译选项中,为MRC的程序添加-fno-objc-arc标记,表明在编译时,该文件使用MRC编译 备注: (1) 演示中使用的RegexKitLite还需要导入libicucore.dylib动态库 (2) 如果要在MRC项目中添加ARC的文件,可以使用 -fobjc-arc 标记即可 3> 将MRC的第三方库直接编译成

关闭xCode项目的ARC设置

 ARC forbids explicit message send of 'release' 'release' is unavailable: not available in automatic reference counting mode 今天,遇到了这么样的问题. 很显然,是ARC的问题. 错误原因:因为我们设置了用ARC来管理内存释放,我们却又调用了release方法去释放对象. ARC是什么?(我也贴一段网上的简短说明) ARC是iOS 5推出的新功能,全称叫 ARC(Autom

Objective-C(十六、内存管理,自动释放池,ARC,强指针,弱指针,方法族)——iOS开发基础

结合之前的学习笔记以及参考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结.知识点一直在变,只是作为参考,以苹果官方文档为准~ 十六.内存管理相关知识(二) 1.autorelease,自动释放机制 - (instancetype)autorelease; (1)自动释放池的创建 iOS5.0之前 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //进行一系列操作 //此处不可以使用

基于Java的Arc Engine二次开发的环境的配置

1.软件准备 ArcGIS for Desktop 10.2, Arc engine, jdk-7u60-windows-i586,Eclipse Mar2 2.软件的安装 2.1 ArcGIS for Desktop 10.2的安装 软件的下载:ArcGIS for Desktop 10.3全套的下载:http://pan.baidu.com/s/1o7F4yue,附带破解方法 本文使用的是10.2,其下载路径与安装破解方法如:http://jingyan.baidu.com/article/