# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
479673 | nicolaalexandra | Floppy (RMI20_floppy) | C++14 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define DIM 100010
#include "floppy.h"
using namespace std;
int n;
int v[DIM];
deque <int> d;
string bits;
vector <pair<int,int> > events[DIM];
/*
void save_to_floppy (string s){
bits = s;
cout<<s<<endl;
}
*/
void read_array (int useless, vector<int> &a){
n = a.size();
for (int i=1;i<=n;i++)
v[i] = a[i-1];
string bits;
for (int i=1;i<=n;i++){
while (!d.empty() && v[i] > v[d.back()]){
d.pop_back();
bits += "1";
}
d.push_back(i);
bits += "0";
}
save_to_floppy(bits);
}
vector <int> solve_queries (int useless, int n, string &bits, vector<int> &a, vector<int> &b){
int m = a.size();
for (int i=0;i<m;i++){
a[i]++, b[i]++;
events[b[i]].push_back(make_pair(a[i],i));
}
vector <int> ans(m,0);
d.clear();
int poz = 1;
for (int i=0;i<bits.length();i++){
if (bits[i] == '0'){
d.push_back(poz);
/// rezolv toate query uile cu b ul in poz
for (auto it : events[poz]){
int a = it.first;
int st = 0, dr = d.size()-1, sol = 0;
while (st <= dr){
int mid = (st+dr)>>1;
if (d[mid] >= a){
sol = d[mid];
dr = mid-1;
} else st = mid+1;
}
ans[it.second] = sol - 1;
}
poz++;
} else d.pop_back();
}
return ans;
}
/*
int main (){
ifstream cin ("date.in");
ofstream cout ("date.out");
int n,m,i,x,y;
cin>>n;
vector <int> a(n,0);
for (i=0;i<n;i++)
cin>>a[i];
cin>>m;
vector <int> A(m,0);
vector <int> B(m,0);
for (i=0;i<m;i++)
cin>>A[i]>>B[i];
read_array(0,a);
vector<int> ans = solve_queries(0,n,bits,A,B);
for (auto it : ans)
cout<<it<<"\n";
return 0;
}
*/