Submission #67220

#TimeUsernameProblemLanguageResultExecution timeMemory
67220zetapiDancing Elephants (IOI11_elephants)C++14
100 / 100
4648 ms94056 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define ll long long #define itr ::iterator typedef pair<int,int> pii; const int MAX=2e6; const int len=400; ll N,K,qcnt,pos[MAX],lol[MAX]; struct data { int size; ll arr[1000],dp[1000],right[1000]; data() { size=0; } void cal() { int ptr=size; for(int A=size-1;A>=0;A--) { while(arr[ptr-1]-arr[A]>K) --ptr; if(ptr==size) { dp[A]=1; right[A]=arr[A]+K; } else { dp[A]=1+dp[ptr]; right[A]=right[ptr]; } } return ; } void insert(int val) { int B=0; for(int A=size-1;A>=0;A--) { if(arr[A]<=val) { B=A+1; break; } } for(int C=size;C>B;C--) arr[C]=arr[C-1]; arr[B]=val; ++size; return ; } void remove(int val) { for(int A=0;A<size;A++) { if(arr[A]==val) { for(int B=A;B<size-1;B++) arr[B]=arr[B+1]; break; } } --size; return ; } } block[400]; void init(int n,int l,int X[]) { N=n; K=l; for(int A=0;A<N;A++) { pos[A]=X[A]; block[A/len].arr[block[A/len].size]=X[A]; block[A/len].size++; } for(int A=0;block[A].size>0;A++) block[A].cal(); return ; } int update(int idx,int val) { ++qcnt; int B; for(B=0;block[B].size>0;B++) { if(block[B].arr[0]>pos[idx]) break; } if(B) B--; block[B].remove(pos[idx]); block[B].cal(); pos[idx]=val; for(B=0;block[B].size>0;B++) { if(block[B].arr[0]>pos[idx]) break; } if(B) B--; block[B].insert(pos[idx]); block[B].cal(); ll covered=-1,res=0; for(int A=0;block[A].size>0;A++) { int cur=upper_bound(block[A].arr,block[A].arr+block[A].size,covered)-block[A].arr; if(cur==block[A].size) continue; res+=block[A].dp[cur]; covered=block[A].right[cur]; } if(qcnt==len-2) { int cur=0; for(int A=0;block[A].size>0;A++) { for(int B=0;B<block[A].size;B++) lol[cur++]=block[A].arr[B]; block[A].size=0; } for(int A=0;A<cur;A++) { block[A/len].arr[block[A/len].size]=lol[A]; block[A/len].size++; } for(int A=0;block[A].size>0;A++) block[A].cal(); qcnt=0; } return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...