Spistreści 25latOlimpiady Informatycznej 9
EdycjeOlimpiadyInformatycznej ··· 13
Sukcesywolimpiadachmiędzynarodowych ··· 13
ŹródłasukcesówOlimpiadyInformatycznej ··· 19
Ozadaniach ··· 21
Oksiążce ··· 21
Oredaktorach ··· 24
Zadania–częśćpierwsza Rozgrzewka
Lizak 29
Minusy 33
Trójkątyjednobarwne 38
Liczbyantypierwsze 40
Kosztzamortyzowany
Krążki ··· 45
Gdziezbudowaćbrowar? ··· 51
Stos
Plakatowanie 55
TetrisAttack 63
Przeszukiwaniegrafów Równanienasłowach ··· 68
Jedynkiizera ··· 72
Agenci ··· 76
Algorytmyzachłanne
Szeregowanieczynności ··· 80
RozkładFibonacciego ··· 86
Programowaniedynamiczne I
Rezerwacjasalwykładowych ··· 93
Różnica ··· 97
Zająknięcia 102
Drzewa
Dostawcapizzy 109
Łuktriumfalny ··· 117
Wielokąt ··· 122
AlgorytmygrafoweI
Odległość ··· 127
Zawody ··· 132
Dziuple ··· 137
Żabka 143
Zadania–częśćdruga Drzewaprzedziałowe
Kurierzy 157
Kopalniazłota 165
Klocki 170
Meteory 181
Wilczedoły 185
AlgorytmygrafoweII
Przedsięwzięcie ··· 189
Hazard ··· 196
Drogizmiennokierunkowe ··· 201
Zadanianabibliotekę
KolekcjonerBajtemonów 205
Gdziejestjedynka? 210
Architekci 215
Meetinthemiddle
Szyfr ··· 224
Panelesłoneczne ··· 230
Algorytmytekstowe
Korale 234
Okresysłów 238
Palindromy 242
ProgramowaniedynamiczneII
Kupnogruntu ··· 248
Szatnia ··· 256
Zapiekanki ··· 262
AlgorytmygrafoweIII
Autostrady ··· 270
Magazynier ··· 276
Gońcy 280
Kości 286
Inne
Pionek ··· 294
Lunatyk ··· 304
Gra ··· 309
Pionki ··· 315
Technikialgorytmiczneistrukturydanych
Drzewoprzedziałowe ··· 325
Strukturydlauporządkowanegomultizbioru ··· 325
Drzewoprzedziałowetypupunkt–przedział ··· 335
Drzewoprzedziałowetypuprzedział–punkt ··· 340
Drzewoprzedziałowetypuprzedział–przedział ··· 344
Codalej? 348
Kolejkaminimów 349
Implementacjakolejki 349
Kolejkadladowolnejoperacjiłącznej ··· 352
Haszowanienapisówisłownikpodsłówbazowych ··· 354
Słownikpodsłówbazowych ··· 354
Haszowanienapisów ··· 356
Zastosowania ··· 357
Jakdobieraćparametrywhaszowaniu? ··· 360
Drzewopalindromów 365
Opisdrzewa 365
Konstrukcjadrzewapalindromów 366
Zastosowania 369
Rozwiązaniezadania Palindromy ··· 369
Kolejnetematy ··· 375
Bibliografia ··· 383
Indekszadań ··· 384
25latOlimpiadyInformatycznej OlimpiadaInformatycznanarodziłasięwrokuszkolnym1993/1994jakonajmłodsza olimpiadaprzedmiotowawPolscewobszarzenaukścisłychiprzyrodniczych.CelemOlimpiadyjestumożliwianieuczniomuzdolnionyminformatycznieuczestnictwa wszlachetnejrywalizacjinawiedzęiumiejętnościzrówieśnikamizcałegokrajuoraz wyłanianienajlepszychznich,którzypóźniejmierząsięznajlepszymimłodymiinformatykamizcałegoświata.UczestnicyOlimpiadymusząwykazaćsięumiejętnościami analizowaniaproblemówobliczeniowych,układaniawydajnychalgorytmówiimplementowaniaichwjęzykachprogramowaniawysokiegopoziomu,doborustosownych strukturdanych,testowaniaprogramów,pracywśrodowiskuprogramistycznym.Po prostumusządziałaćtak,jakzawodowiinformatycy.
OlimpiadaInformatycznatorealizacjamarzeńnaukowców,edukatorówipopularyzatorówinformatyki,którzyweszliwskładpierwszegoKomitetuGłównegoOlimpiadyInformatycznejutworzonegonamocy AktupowołaniaOlimpiadyInformatycznej zdnia10grudnia1993roku,podpisanegoprzezówczesnegodyrektoraInstytutu InformatykinaUniwersytecieWrocławskim,profesoraMaciejaM.Sysłę.Siedzibą OlimpiadyInformatycznejdodziśjestOśrodekEdukacjiInformatycznejiZastosowańKomputerów(OEIiZK)wWarszawie.WskładziepierwszegoKomitetuGłównegoOlimpiadyInformatycznejznaleźlisię:
prof.drhab.inż.JacekBłażewiczPolitechnikaPoznańska prof.drhab.JanMadey UniwersytetWarszawski prof.drhab.AndrzejW.MostowskiUniwersytetGdański prof.drhab.WojciechRytterUniwersytetWarszawski prof.drhab.MaciejM.SysłoUniwersytetWrocławski drhab.inż.StanisławWaligórskiUniwersytetWarszawski drPiotrChrząstowski-WachtelUniwersytetWarszawski drAndrzejWalat OEIiZK drBolesławWojdyło UniwersytetMikołajaKopernikawToruniu mgrJerzyDałek MinisterstwoEdukacjiNarodowej mgrKrzysztofJ.Święcicki MinisterstwoEdukacjiNarodowej TadeuszKuran OEIiZK mgrKrystynaKominek IILOim.StefanaBatoregowWarszawie
Pierwszymprzewodniczącym KomitetuGłównegozostałdrhab.inż.Stanisław Waligórski,sekretarzemnaukowym–drAndrzejWalat,akierownikiemorganizacyjnym–TadeuszKuran,którypełnitęfunkcjędodziś(obecniemaonanazwękoordynatoraOlimpiady).FunkcjęsekretarzaKomitetuobjęłamgrKrystynaKominek.Skład Komitetuodzwierciedlałzaangażowaniewielupodmiotów–najlepszychuczelniinformatycznychwkraju,MinisterstwaEdukacjiNarodowej,środowiskanauczycielskiego –wdziałanianarzeczedukacjiinformatycznejpolskiejmłodzieży.Wpóźniejszym okresiedotegogronadołączyłyteżpolskiefirmyinformatyczne.Ścisławspółpraca najlepszychuczelniinformatycznych,edukatorówinformatykiifirminformatycznych lubtychdziałającychnarzeczrozwojuinformatykijestcharakterystycznadladziałań OlimpiadyInformatycznejtakżeidzisiaj.
TwórcyOlimpiadyInformatycznejopracowalistandardyprzeprowadzaniazawodówOlimpiady,którewswoichpodstawachobowiązujądodziś.WprzyjętymregulaminieokreślononastępująceceleOlimpiadyInformatycznej:
(1)Stwarzaniemotywacjidozainteresowanianauczycieliiuczniównowymimetodami informatyki.
(2)Rozszerzaniewspółdziałaniamiędzynauczycielamiakademickimiinauczycielami szkółwkształceniumłodzieżyuzdolnionej.
(3)Stymulowanieaktywnościpoznawczejmłodzieżyinformatycznieuzdolnionej.
(4)Kształtowanieumiejętnościsamodzielnegozdobywaniaorazrozszerzaniawiedzy informatycznej.
(5)Stwarzaniemłodzieżymożliwościszlachetnegowspółzawodnictwawrozwijaniu swoichuzdolnień,anauczycielom–warunkówtwórczejpracyzmłodzieżą.
(6)WyłanianiereprezentacjiRzeczypospolitejPolskiejnaMiędzynarodowąOlimpiadęInformatyczną.
Przez25latOlimpiadyInformatycznejskładKomitetuGłównegozmieniałsię wsposób,którypozwalałnazachowanieciągłościpracyidoskonaleniedziałańOlimpiady.Komitetprzedewszystkimotwierałsięnabyłycholimpijczyków,którychdoświadczeniazestartuwOlimpiadzieprzyczyniałysiędodoskonaleniajejorganizacji iciągłegopodnoszeniapoziomumerytorycznego.WtabelinanastępnejstroniezawartowykazwszystkichosóbbiorącychudziałwpracachKomitetuGłównegoOlimpiady Informatycznejnaprzestrzeniostatnich25lat.DlakażdejosobypodanoedycjeOlimpiadyorazewentualnąfunkcjępełnionąwKomitecie;tytułyistopnienaukowesą aktualne,aleafiliacjepodanonadzieńprzystąpieniadoKomitetu.
OlimpiadaInformatycznatokonkurstrzyetapowy.Wkażdymetapieuczniowie dostająpewnąliczbęzadańdorozwiązania.Każdezadanietokrótkahistoryjkaopisującaukrytyproblemalgorytmiczny.Rozwiązaniemzadaniajestzazwyczajalgorytm zapisanywpostaciprogramuwwybranymprzezzawodnikajęzykuprogramowania. Poprawniekompilującesięprogramysąnastępnieuruchamianenanieznanychdla zawodnikówtestachprzygotowanychprzezorganizatorów.Testysątakdobrane,żebywykrywałyprogramyniepoprawneiróżnicowałyrozwiązaniaoróżnejzłożoności obliczeniowej,szczególniezłożonościczasowej–złożonośćpamięciowajestwymuszanaprzezpodaneexpliciteograniczenianawielkośćwykorzystywanejprzezprogram pamięci.WOlimpiadzieliczbapunktówotrzymanazazadaniezależyodjakości zaproponowanegoalgorytmuijegoimplementacji.
Zająknięcia XXIIIOlimpiadaInformatyczna(2015/2016),etapII
Autorzadania:TomaszSyposz
Opisrozwiązania:JakubRadoszewski
Limitpamięci:32MB https://oi.edu.pl/pl/archive/oi/23/zaj
Bitekzapadłostatnionadziwnąchorobę:straszniesięjąka,aprzytymjedynesłowa, którewypowiada,toliczby.Jegostarszybrat,Bajtek,zauważyłjednakdziwnąpowtarzalnośćwzająknięciachBitka.Podejrzewa,żeBitektaknaprawdęudaje,żebynie chodzićdoszkołyimócwięcejgraćnakomputerze.Bajtekniemożeprzeztouczyć sięprogramowaniaijestztegopowodubardzosmutny.Postanowiłwięczdemaskować młodszegobratailiczy,żewnagrodębędziemiałtyleczasunaprogramowanie,ile duszazapragnie.
OpiszmyformalniepodejrzeniaBajtka.Załóżmy,żemamydanyciągliczb A
• Podciągiem ciągu A nazywamyciągpowstałyprzezwyrzuceniez A dowolnych wyrazów,np.1, 1, 7, 5jestpodciągiemciągu1, 3, 1, 7, 6, 6, 5, 5,natomiast1, 5, 7 nimniejest.
• Zająknięciem ciągu A nazywamypodciąg A,któryskładasięzustawionychpo koleipartakichsamychwyrazów,np.1, 1, 1, 1, 3, 3oraz2, 2sązająknięciami ciągu1, 2, 1, 2, 1, 2, 1, 3, 3,natomiast1, 2, 1, 2oraz2, 2, 2niminiesą.
Formalniezająknięciejestpodciągiempostaci a1,a2,a3,...,a2k 1,a2k,gdzie a2i 1 = a2i dla1 i k.
MającdanedwiewypowiedziBitkajakociągiliczb,pomóżBajtkowistwierdzić,jakajestdługośćnajdłuższegozająknięcia,którewystępujewkażdymztychciągów, anagrodacięnieominie.
Wejście
Pierwszywierszwejściazawieradwieliczbycałkowite n oraz m (n,m 2)oznaczającedługościciągów A i B,którereprezentująwypowiedziBitka.Wdrugimwierszuwejściaznajdujesię n liczbcałkowitych a1,a2,...,an,czylikolejnewyrazyciągu A (1 ai 109).Wtrzecimwierszuwejściaznajdujesię m liczbcałkowitych b1,b2,...,bm,czylikolejnewyrazyciągu B (1 bi 109).
Wyjście Twójprogrampowinienwypisaćnawyjściejednąnieujemnąliczbęcałkowitąoznaczającądługośćnajdłuższegowspólnegozająknięciaciągów A i B.Jeśliciąginiemają żadnegowspólnegozająknięcia,poprawnymwynikiemjest0.
Dladanychwejściowych: 79 1223111 242312411 poprawnymwynikiemjest: 4
Wyjaśnienieprzykładu: Szukanymciągiemjest2,2,1,1.
Ocenianie Zestawtestówdzielisięnapodzadaniaspełniająceponiższewarunki.Testydokażdego podzadaniaskładająsięzjednejlubwiększejliczbyosobnychgruptestów.
Podzadanie Warunki Liczbapunktów
n,m 2000
2 n,m 15000ikażdaliczbawkażdym ciąguwystępujeconajwyżejdwarazy
Rozwiązanie Wzadaniudanesądwaciągiliczb A =(a1,...,an)i B =(b1,...,bm).Wopisie rozwiązaniazamiastowartościachelementówciągówwygodniejnambędziemówić oichkolorach,takwięcnp. ai będzieoznaczaćkolor i-tegoelementuciągu A.Naszym celemjestznaleźćnajdłuższewspólnezająknięcieciągów A i B,czylinajdłuższyciąg kolorówzłożonyzparamipowtarzającychsięelementów,któryjestpodciągiemkażdegozciągów A i B.Coistotne,wodpowiedziwystarczypodaćdługośćnajdłuższego wspólnegozająknięcia.
Najdłuższywspólnypodciąg Naszezadanieewidentniemazwiązekzproblememznajdowanianajdłuższegowspólnegopodciągudwóchciągów.Rozważaniazacznijmywięcodprzypomnieniaklasycznegorozwiązaniategoproblemuzapomocąprogramowaniadynamicznego(patrznp. książka Wprowadzeniedoalgorytmów [6]).Wyznaczasięwnimdwuwymiarowątablicę NWP rozmiaru(n +1) × (m +1),takąże NWP[i,j]oznaczadługośćnajdłuższego wspólnegopodciąguciągów a1,...,ai oraz b1,...,bj .Szukanymwynikiemjestoczywiście NWP[n,m].Mamynastępującązależnośćrekurencyjną:
NWP[i,j]=
jeżeli i =0lub j =0, NWP[i 1,j 1]+1
jeżeli ai = bj , max(NWP [i 1,j], NWP[i,j 1])wprzeciwnymprzypadku.
IXOlimpiadaInformatyczna(2001/2002),etapIII Autorzadaniaiopisurozwiązania:WojciechGuzicki Limitpamięci:32MB
https://oi.edu.pl/pl/archive/oi/9/szy
Danyjestciąg n dodatnichliczbcałkowitych a1,a2,...,an.Ciągtenjestużywany doszyfrowania n-bitowychwiadomości.Jeślimamywiadomość,którejkolejnebity tworząciąg t1,t2,...,tn (ti ∈{0, 1}),topozaszyfrowaniumaonapostaćliczby
Maszdanązaszyfrowanąwiadomośćorazciągliczb(ai),któregoużytodojej zaszyfrowania.Twojezadaniepoleganaodkodowaniuzaszyfrowanejwiadomości.
Wejście Wpierwszymwierszuwejściaznajdujesięjednaliczbacałkowita n (5 n 40). Wkolejnych n wierszachjestzapisanyciągliczb a1,a2,...,an.Sumaliczb ai nie przekracza2000000000.Wkolejnymwierszuzapisanajestjednaliczbacałkowita S –zaszyfrowanawiadomość(0 S a1 + a2 + ... + an).
Wyjście Wjedynymwierszuwyjścianależyzapisaćkolejneliczby ti,bezżadnychodstępówmiędzynimi.Danetestowezostałydobranetak,żezaszyfrowanewiadomościsą określonejednoznacznie.
Przykład Dladanychwejściowych: 24 19226985 123697 67356296 19721773 1113273 69335448 23680077 9029881 85168664 93676782 5253843 77616588 78572630 13375812 17199980 101508862 59248276 3505733 35790095 62028546 85726819 56462819 103373994 91757169 667509506 poprawnymwynikiemjest: 110001000101101100010101
Rozwiązanie Problem,którymamyrozwiązać, jestszczególnymprzypadkiemtzw.problemupakowaniaplecaka.WcałejogólnościzostałonbardzodobrzeopisanywksiążceMacieja M.Sysły Algorytmy [13],gdziewszczególnościmożnaznaleźćdośćskutecznealgorytmyopartenametodzieprogramowaniadynamicznego.Tegotypurozwiązanieproblemuplecakowegowystępujetakżewopracowaniuzadania Szatnia nastronie256. Wspomnianerozwiązaniadziałajądobrzewtedy,gdysumaliczb W = a1 +a2 + +an jestdośćmała(złożonośćwynosi O(nW )).Wnaszymprzypadku,gdyliczba W może wynosićokoło2 109,tealgorytmysąnieprzydatne.
Zadanieniemadobregorozwiązania.Mianowiciejeślidanesądowolneliczbycałkowite a1,a2,...,an iliczbacałkowita S,tozadaniepolegającenaznalezieniuciągu t1,t2,...,tn owyrazachzezbioru {0, 1},takiegoże t1a1 + t2a2 + ... + tnan = S, jestproblememNP-zupełnym.Niemożemywięcspodziewaćsięrozwiązaniadziałającegowczasiewielomianowym.Jedyneznanerozwiązaniategoproblemuwogólności działająwczasiewykładniczym.Przyjrzyjmysięzatemtakimrozwiązaniom.
Najbardziejnarzucasięmetodaprzeszukaniawszystkichciągówzero-jedynkowych; teżtrzebatozrobićzręcznie,bywielokrotnieniedodawaćdosiebietychsamychliczb. Takiprogramdziaławczasie O(2n).
Skuteczniejszajestmetodaprzeszukiwaniaznawrotami.Polegaonanaprzeglądaniuwszystkichprzypadków,któremogąprowadzićdorozwiązania.Przypuśćmy, żewdanymmomenciezdecydowaliśmysięwybraćliczby t1,t2,...,tk,gdzie k<n Niech
Suma = t1a1 + t2a2 + + tkak
Mamyteraznastępującemożliwości:
• Jeśli Suma >S,todalszeposzukiwanianiemająsensuimusimycofnąćsiędo ciąguliczb t1,t2,...,tk 1.
• Jeśli Suma + ak+1 + ... + an <S,towtakimprzypadkuteżmożemyzakończyć poszukiwaniaicofnąćsiędociąguliczb t1,t2,...,tk 1.
• Jeśliniezachodziżadnezpowyższych,torozważamydwaprzypadki: tk+1 =0 oraz tk+1 =1.
Takmożewyglądaćzapistegopomysłuwpseudokodzie:
1: function Rek (k, Suma)
2: begin
3: if Suma >S or Suma + pk+1 <S thenreturn; 4: elseif k = n then
5: wypiszciąg t1,...,tn jakorozwiązanie;
6: elsebegin
7: tk+1 :=0; Rek (k +1, Suma);
8: tk+1 :=1; Rek (k +1, Suma + ak+1);
9: end
10: end
Drzewoprzedziałowe Autor: TomaszIdziaszek
Drzewoprzedziałowejestjednązważniejszychstrukturdanychwarsenaleolimpijczykawykorzystywanąwrozwiązaniachwieluzadań.Niemniejjednakinformacjina jegotematpróżnoszukaćwstandardowychpodręcznikachdoalgorytmówipublikacjachnaukowych.Tostrukturadanychtypowoolimpijska:nadajesiędozastosowań,wktórychznanejestograniczeniegórnenarozmiarprzechowywanychdanych iwktórychzależynamnaprostocieimplementacji.Wpodręcznikachczęściejznajdziemyopisyzrównoważonychdrzewbinarnych,takichjakdrzewaczerwono-czarne czydrzewaAVL.
Artykułtenjestpróbązebraniaiuporządkowaniazagadnieńdotyczącychdrzewa przedziałowego,któredotychczasbyłyrozproszonewniebieskichksiążeczkach,ale zawierarównieżtreści,któredotejporyniedoczekałysięopisuwliteraturze.
Strukturydlauporządkowanegomultizbioru Zaczniemyodnajprostszegozastosowaniadrzewaprzedziałowego,amianowiciezaimplementujemyzajegopomocąstrukturędanychumożliwiającąprzechowywanie uporządkowanegomultizbioruliczbcałkowitychiwykonywanienanimokreślonych operacji.Wzależnościodrodzajupotrzebnychnamoperacjitakąstrukturędanych możnazrealizowaćwmniejlubbardziejprostysposób.Ztegoteżpowoduprzedstawimyażczterymożliweimplementacje:zapomocątablicy,kontenerówzestandardowej bibliotekiC++orazdwóchszczególnychprzypadkówdrzewaprzedziałowego–drzewa licznikowegoidrzewapotęgowego.
Multizbiórtouogólnieniezbioru,wktórymwartościmogąsiępowtarzać.Przykładowo {1, 2, 4, 4, 4, 5} jestmultizbiorem,wktórymwystępująwartości1,2,4i5, przyczymwartość4występujetrzykrotnie.Multizbiórtenma6elementów.Liczbę wystąpieńwartościnazywamyjejkrotnością(takwięcwartość4makrotność3,wartość1makrotność1,awartość3makrotność0).Najbardziejpodstawoweoperacje, którepotrzebujemywykonywać,żebywogólemówićomultizbiorzeliczb,to:
• init(S):utworzeniepustegomultizbioru S;
• insert(S,x):wstawienienowegoelementuowartości x domultizbioru S;
• remove(S,x):usunięciejednegoelementuowartości x zmultizbioru S;
• count(S,x):podanie,ileelementówowartości x znajdujesięwmultizbiorze S;
• size(S):podanieliczbywszystkichelementówwmultizbiorze S
Reprezentacjatablicowa Napoczątekprzyjmijmyzałożenie,żewszystkiemożliwewartości,któremożemy wstawiaćdomultizbioru,sąliczbamicałkowitymizprzedziałuod1do n,przyczym wartość n jestnatylenieduża,żepozwalanamużyćstrukturydanychwykorzystującej O(n)komórekpamięci.
Najprostszaimplementacjamultizbiorupoleganatrzymaniutablicy,wktórejzapisujemykrotnościposzczególnychwartościmultizbioru.Niech cx oznaczakrotność
wartości x (czyliliczbęelementówowartości x)wmultizbiorze S.Operacja init(S) tworzy n-elementowątablicę t[1 ..n],początkowowypełnionązerami.Będziemyutrzymywaliniezmiennik,że t[x]= cx dla1 x n.Będziemyteżosobnopamiętali wartość C = 1 i n ci
Operacja insert(S,x)zwiększaojedenwartości t[x]oraz C.Analogicznieoperacja remove(S,x)zmniejsza t[x]oraz C ojeden.Mamyrównież count(S,x)= t[x]oraz size(S)= C.Wszystkieteoperacjedziałająwczasiestałym.
Konteneryzbibliotekistandardowej Jeślimultizbiór S jestniepusty,tomożemychciećwykonywaćdodatkoweoperacje polegającenaznajdowaniuwartościspełniającychpewnekryteria:
• minimum(S), maximum(S):znalezienienajmniejszejlubnajwiększejwartości wmultizbiorze S;
• pred(S,x), succ(S,x):znalezieniewartościpoprzedzającej x (największejmniejszejod x)lubnastępującejpo x (najmniejszejwiększejod x)wmultizbiorze S WprzypadkuimplementacjitablicowejtakieoperacjebędąwymagaływpesymistycznymprzypadkuczasuΘ(n).
AlejeśliprogramujemywjęzykuC++,todozaimplementowaniamultizbioru możemywykorzystaćkontener multiset dostępnywstandardowejbibliotecejęzyka: #include<set> usingnamespacestd; multiset<int>S;
Podstawoweoperacjeprzedstawionepoprzedniowyglądająnastępująco:
Operacja Kod init(S) (automatycznie) insert(S,x) S.insert(x); remove(S,x) S.erase(S.find(x)); count(S,x) returnS.count(x); size(S) returnS.size();
Wartozwrócić uwagę,żeoperacjausunięciatoniejestpoprostu S.erase(x),bo takiewywołanieusunie wszystkie wystąpieniawartości x zmultizbioru.
Wszystkieteoperacje(opróczostatniej)działająwczasie O(log C),gdzie C jest liczbąelementówwmultizbiorze S.Operacja size(S)działawczasiestałym.Możemy teżwykonaćczterynoweoperacje,zktórychkażdadziaławczasie O(log C):
Operacja Kod minimum(S) return*S.begin(); maximum(S) autoit=S.end(); return*--it; succ(S, x) return*S.upper_bound(x); pred(S,x) autoit=S.lower_bound(x); return*--it;