i have been getting WA in the problem ORDERSET but i am unable to debug my code. please help !!
here is my code
#include<bits/stdc++.h>
// Input macros
#define s(n) scanf(" %d",&n)
#define sc(n) scanf(" %c",&n)
#define sl(n) scanf("%lld",&n)
#define sf(n) scanf("%lf",&n)
#define ss(n) scanf("%s",n)
// Useful constants
#define INF (int)1e9
#define EPS 1e-9
// Useful hardware instructions
#define bitcount __builtin_popcount
#define gcd __gcd
// Useful container manipulation / traversal macros
#define forall(i,a,b) for(int i=a;i<b;i++)
#define foreach(v, c) for( typeof( (c).begin()) v = (c).begin(); v != (c).end(); ++v)
#define all(a) a.begin(), a.end()
#define in(a,b) ( (b).find(a) != (b).end())
#define pb push_back
#define fill(a,v) memset(a, v, sizeof a)
#define sz(a) ((int)(a.size()))
#define mp make_pair
// Some common useful functions
#define maX(a,b) ( (a) > (b) ? (a) : (b))
#define miN(a,b) ( (a) < (b) ? (a) : (b))
#define checkbit(n,b) ( (n >> b) & 1)
#define DREP(a) sort(all(a)); a.erase(unique(all(a)),a.end())
#define INDEX(arr,ind) (lower_bound(all(arr),ind)-arr.begin())
using namespace std;
struct node
{
char t;
int val;
}q[200005];
int BIT[200005],RM[200005],totalCount,temp[200005],maxi;
mapM;
int BS(int val)
{
int low = 0;
int high = maxi-1;
int ans = -1;
while(low<=high)
{
int mid = (low + high)>>1;
if(RM[mid] {
ans = mid;
low = mid+1;
}
else
high = mid -1;
}
return ans;
}
int update(int val,int index)
{
while(index<=maxi)
{
BIT[index] += val;
index = index + (index & (-index));
}
if(val>0)totalCount++;
else totalCount--;
//cout<<"totalCount = "<}
int find(int index)
{
int ans = 0;
while(index>0)
{
ans+= BIT[index];
index = index - (index & (-index));
}
return ans;
}
int main()
{
totalCount = 0;
int n;
s(n);
forall(i,0,n)
{
sc(q[i].t);
s(q[i].val);
if(q[i].t =='I')
{
M[q[i].val];
}
}
maxi = 0;
for(map::iterator it = M.begin();it!= M.end();++it)
{
M[it->first] = maxi;
RM[maxi++] = it->first;
}
//forall(i,0,maxi)printf("%d ",RM[i]);
//cout< fill(BIT,0);
forall(i,0,n)
{
//cout<<"i = "< if(q[i].t == 'I')
{
if(temp[M[q[i].val]] == 0){
update(1,M[q[i].val]+1);
temp[M[q[i].val]] = 1;
}
}
else if(q[i].t =='D')
{
if(temp[M[q[i].val]] == 1){
update(-1,M[q[i].val]+1);
temp[M[q[i].val]] = 0;
}
}
if(q[i].t == 'C')
{
int index = BS(q[i].val);
if(index<0)printf("0\n");
else printf("%d\n",find(index+1));
}
if(q[i].t =='K')
{
if(q[i].val>totalCount){printf("invalid\n");continue;}
int k = q[i].val;
int low = 1;
int high = maxi;
while(low<=high)
{
int mid = (low + high)/2;
int c = find(mid);
if(c == k){printf("%d\n",RM[mid-1]);break;}
else if(c<k){low = mid+1;}
else {high = mid-1;}
}
}
//forall(i,0,maxi+1)printf("%d ",BIT[i]);
//cout<<endl;
}
return 0;
}