Submission #170365

#TimeUsernameProblemLanguageResultExecution timeMemory
170365rzbtCake (CEOI14_cake)C++14
0 / 100
1573 ms44564 KiB
#include <bits/stdc++.h> #define mp make_pair #define pb push_back #define all(x) x.begin(),x.end() #define MAXN 250005 #define F first #define S second using namespace std; typedef long long ll; ll n,a; ll niz[MAXN]; ll seg[4*MAXN]; ll lazy[4*MAXN]; set<pair<ll,ll> > svi; void dodaj(ll l,ll d,ll p,ll x,ll k){ if(l==d){ seg[k]=x; return; } ll mid=(l+d)/2; if(p<=mid)return dodaj(l,mid,p,x,k+k); else dodaj(mid+1,d,p,x,k+k+1); seg[k]=max(seg[k+k],seg[k+k+1]); } ll dobij(ll l,ll d,ll tl,ll td,ll k){ if(l>td || d<tl)return 0; if(l>=tl && d<=td)return seg[k]; ll mid=(l+d)/2; return max(dobij(l,mid,tl,td,k+k),dobij(mid+1,d,tl,td,k+k+1)); } void izgradi(ll l,ll d,ll k){ if(l==d){ seg[k]=niz[l]; return; } ll mid=(l+d)/2; izgradi(l,mid,k+k); izgradi(mid+1,d,k+k+1); seg[k]=max(seg[k+k],seg[k+k+1]); } bool nadjen; ll nadjiL(ll l,ll d,ll tl,ll td,ll k,ll x){ //printf(" %lld %lld %lld %lld\n",l,d,tl,td); if(nadjen)return -1; if(l>td || d<tl)return -1; ll mid=(l+d)/2; if(l>=tl && d<=td){ if(l==d ){ if(seg[k]>x)nadjen=true; return (seg[k]>x?l:-1); } if(seg[k+k+1]>x)return nadjiL(mid+1,d,tl,td,k+k+1,x); return nadjiL(l,mid,tl,td,k+k,x); } ll tren=nadjiL(mid+1,d,tl,td,k+k+1,x); if(tren!=-1)return tren; return nadjiL(l,mid,tl,td,k+k,x); } ll nadjiD(ll l,ll d,ll tl,ll td,ll k,ll x){ //printf(" %lld %lld %lld %lld\n",l,d,tl,td); if(nadjen)return -1; if(l>td || d<tl)return -1; ll mid=(l+d)/2; if(l>=tl && d<=td){ if(l==d ){ //printf(" %lld %lld\n",seg[k],x); if(seg[k]>x)nadjen=true; return (seg[k]>x?l:-1); } //printf(" %lld %lld\n",seg[k+k],x); if(seg[k+k]>x)return nadjiD(l,mid,tl,td,k+k,x); return nadjiD(mid+1,d,tl,td,k+k+1,x); } ll tren=nadjiD(l,mid,tl,td,k+k,x); if(tren!=-1)return tren; return nadjiD(mid+1,d,tl,td,k+k+1,x); } int main()///PROMENI U LONG LONG { scanf("%lld %lld", &n, &a); for(ll i=1;i<=n;i++){ scanf("%lld",niz+i); niz[i]*=500005; svi.insert(mp(niz[i],i)); } izgradi(1,n,1); ll qq; scanf("%lld", &qq); while(qq--){ char qt[5]; scanf("%s", qt); if(qt[0]=='E'){ ll koji,postaje; scanf("%lld %lld", &koji, &postaje); svi.erase(mp(niz[koji],koji)); //printf(" poz %lld brisem %lld ",koji,niz[koji]); auto it=svi.end(); for(ll i=1;i<postaje;i++){ it--; auto tp=*it; tp.F++; svi.erase(it); it=svi.insert(tp).F; dodaj(1,n,tp.second,tp.first,1); printf("%lld ",tp.S); } it--; niz[koji]=(it->first)+1; //printf(" stavljam %lld",niz[koji]); svi.insert(mp(niz[koji],koji)); dodaj(1,n,koji,niz[koji],1); //printf(" sada %lld\n",dobij(1,n,koji,koji,1)); }else{ ll koji; scanf("%lld", &koji); if(koji==a){ printf("0\n"); continue; } if(koji<a){ ll najv=dobij(1,n,koji,a-1,1); nadjen=false; ll tn=nadjiD(1,n,a+1,n,1,najv); if(tn==-1)tn=n+1; printf("%lld\n",tn-koji-1); }else{ ll najv=dobij(1,n,a+1,koji,1); nadjen=false; ll tn=nadjiL(1,n,1,a-1,1,najv); if(tn==-1)tn=0; printf("%lld\n",koji-tn-1); } } } return 0; }

Compilation message (stderr)

cake.cpp: In function 'int main()':
cake.cpp:91:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld %lld", &n, &a);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~
cake.cpp:93:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld",niz+i);
         ~~~~~^~~~~~~~~~~~~~
cake.cpp:99:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld", &qq);
     ~~~~~^~~~~~~~~~~~~
cake.cpp:102:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%s", qt);
         ~~~~~^~~~~~~~~~
cake.cpp:105:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%lld %lld", &koji, &postaje);
             ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cake.cpp:127:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%lld", &koji);
             ~~~~~^~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...