Search Insert Delete
Given below c++14 code is for sid spoj or search insert delete spoj.
Hint:- I just uses unordered_multimap container and whatever is said in question I have implemented that.
Time:- 0.23 sec
/*
===================================================
Name :- Nishant Raj
Email :- raj.nishant360@gmail.com
College :- Indian School of Mines
Branch :- Computer Science and Engineering
Time :- 03 October 2015 (Saturday) 08:52
===================================================*/
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair < int , int >
#define pb push_back
#define mp make_pair
#define mod 1000000009
#define gc getchar_unlocked
void scanint(int &x)
{
register int c = gc();
x = 0;
int neg = 0;
for(;((c<48 || c>57) && c != '-');c = gc());
if(c=='-') {neg=1;c=gc();}
for(;c>47 && c<58;c = gc()) {x = (x<<1) + (x<<3) + c - 48;}
if(neg) x=-x;
}
void scanchar(char &c){
register int x = gc();
for(;(x < 65 || x > 97);x = gc());
c = x;
}
int main(){
int n , m , temp;
scanint(n);
scanint(m);
unordered_multimap<int , int > save;
for(int i = 1 ; i<= n ; i++){
scanint(temp);
save.insert(mp(temp , i));
}
int val;
char type;
int initial_size = n;
while(m--){
scanchar(type);
if(type == 'S'){
scanint(val);
auto it = save.equal_range(val);
if(it.first != save.end()){
auto x = it.first;
auto y = it.first;
y++;
while(y!= it.second){
x = y;
y++;
}
printf("%d\n" , x->second);
} else{
printf("NONE\n");
}
} else if(type == 'I'){
scanint(val);
initial_size++;
save.insert(mp(val , initial_size));
printf("%d\n",initial_size);
} else {
scanint(val);
auto it = save.equal_range(val);
if(it.first!= save.end()){
auto x = it.first;
auto y = it.first;
y++;
while(y!= it.second){
x = y;
y++;
}
printf("%d\n" , x->second);
save.erase(x);
} else{
printf("NONE\n");
}
}
}
return 0;
}
No comments:
Post a Comment
Your comment is valuable to us