#include<stdio.h>
long long int n;
long long int t[1000009] = {0}; // Segement Tree
long long int arr[70009] = {0}; // Original Input
long long int output[700009] = {0};
struct node{
long long int org; // Original Position
long long int kval;
long long int l;
long long int r;
long long int qry; // For Query it's 1 else 0
};
struct node p[700009]; // To store both Queries and Array Elements
int compare(const void *x,const void *y){
struct node *k1 = (struct node *)x;
struct node *k2 = (struct node *)y;
if(k1->kval > k2->kval)
return 1;
else if(k1->kval < k2->kval)
return -1;
else{
if(k1->qry == 1){
return 1;
}
else if(k2->qry == 1){
return -1;
}
}
}
//Iterative Segment Tree
long long int sum(long long int l,long long int r){ // Find Sum in range [l,r)
long long int res = 0;
for(l = n+l,r = n+r; l < r ; l = l>>1,r = r>>1){
if(l&1) { res += t[l++];}
if(r&1) { res += t[--r];}
}
return res;
}
void update(long long int pos,long long int nval){
pos = pos + n;
for(t[pos] = nval; pos > 0 ;pos = pos>>1 ){
t[pos >> 1] = t[pos] + t[pos^1];
}
}
int main(){
long long int i,m=0,l,r;
for(i = 0 ; i < n ; i++){
p[i].org = i;
p[i].qry = 0; // Not a Query
p[i].kval = arr[i];
p[i].l = -1;
p[i].r = -1;
}
scanf("%lld",&m
);//Queries long long int j = 0;
//We have i=n here
for(j = 0 ; j < m ; j++,i++){
long long int val;
scanf("%lld %lld %lld",&l
,&r
,&val
); p[i].org = j;
p[i].kval = val;
p[i].qry = 1;
p[i].l = l-1;
p[i].r = r;// r-1 for recursive
}
long long int b = n+m;//total elements + queries
qsort(p
,b
,sizeof(p
[0]),compare
); for(i = n+m-1 ; i >=0 ; i--){
if(p[i].qry == 0){
update(p[i].org,1);// We update the Segment Tree to have value 1
}
else if(p[i].qry == 1){
long long int res = sum(p[i].l,p[i].r);
output[p[i].org] = res; //Query's Original Position
}
}
for(i = 0 ; i < m ; i++){
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KbG9uZyBsb25nIGludCBuOwpsb25nIGxvbmcgaW50IHRbMTAwMDAwOV0gPSB7MH07IC8vIFNlZ2VtZW50IFRyZWUKbG9uZyBsb25nIGludCBhcnJbNzAwMDldID0gezB9OyAvLyBPcmlnaW5hbCBJbnB1dApsb25nIGxvbmcgaW50IG91dHB1dFs3MDAwMDldID0gezB9OyAKc3RydWN0IG5vZGV7Cglsb25nIGxvbmcgaW50IG9yZzsgLy8gT3JpZ2luYWwgUG9zaXRpb24KCWxvbmcgbG9uZyBpbnQga3ZhbDsKCWxvbmcgbG9uZyBpbnQgbDsKCWxvbmcgbG9uZyBpbnQgcjsKCWxvbmcgbG9uZyBpbnQgcXJ5OyAvLyBGb3IgUXVlcnkgaXQncyAxIGVsc2UgMAp9OwpzdHJ1Y3Qgbm9kZSBwWzcwMDAwOV07IC8vIFRvIHN0b3JlIGJvdGggUXVlcmllcyBhbmQgQXJyYXkgRWxlbWVudHMKaW50IGNvbXBhcmUoY29uc3Qgdm9pZCAqeCxjb25zdCB2b2lkICp5KXsKCXN0cnVjdCBub2RlICprMSA9IChzdHJ1Y3Qgbm9kZSAqKXg7CglzdHJ1Y3Qgbm9kZSAqazIgPSAoc3RydWN0IG5vZGUgKil5OwogICAgaWYoazEtPmt2YWwgPiBrMi0+a3ZhbCkKICAgIAlyZXR1cm4gMTsKICAgIGVsc2UgaWYoazEtPmt2YWwgPCBrMi0+a3ZhbCkKICAgIAlyZXR1cm4gLTE7CiAgICBlbHNlewogICAgCWlmKGsxLT5xcnkgPT0gMSl7CiAgICAJCXJldHVybiAxOwoJCX0KCQllbHNlIGlmKGsyLT5xcnkgPT0gMSl7CgkJCXJldHVybiAtMTsKCQl9Cgl9Cn0KLy9JdGVyYXRpdmUgU2VnbWVudCBUcmVlCmxvbmcgbG9uZyBpbnQgc3VtKGxvbmcgbG9uZyBpbnQgbCxsb25nIGxvbmcgaW50IHIpeyAgLy8gRmluZCBTdW0gaW4gcmFuZ2UgW2wscikKCWxvbmcgbG9uZyBpbnQgcmVzID0gMDsKCWZvcihsID0gbitsLHIgPSBuK3I7IGwgPCByIDsgbCA9IGw+PjEsciA9IHI+PjEpewoJCWlmKGwmMSkgeyByZXMgKz0gdFtsKytdO30KCQlpZihyJjEpIHsgcmVzICs9IHRbLS1yXTt9IAoJfQoJcmV0dXJuIHJlczsKfQp2b2lkIHVwZGF0ZShsb25nIGxvbmcgaW50IHBvcyxsb25nIGxvbmcgaW50IG52YWwpeyAKCXBvcyA9IHBvcyArIG47Cglmb3IodFtwb3NdID0gbnZhbDsgcG9zID4gMCA7cG9zID0gcG9zPj4xICl7CgkJdFtwb3MgPj4gMV0gPSB0W3Bvc10gKyB0W3Bvc14xXTsKCX0KfQppbnQgbWFpbigpewoJbG9uZyBsb25nIGludCBpLG09MCxsLHI7CglzY2FuZigiJWxsZCIsJm4pOwoJZm9yKGkgPSAwIDsgaSA8IG4gOyBpKyspewoJCXNjYW5mKCIlbGxkIiwmYXJyW2ldKTsKCQlwW2ldLm9yZyAgPSBpOwoJCXBbaV0ucXJ5ICA9IDA7IC8vIE5vdCBhIFF1ZXJ5CgkJcFtpXS5rdmFsID0gYXJyW2ldOyAKCQlwW2ldLmwgICAgPSAtMTsKCQlwW2ldLnIgICAgPSAtMTsgCgl9CglzY2FuZigiJWxsZCIsJm0pOy8vUXVlcmllcwoJbG9uZyBsb25nIGludCBqID0gMDsKCS8vV2UgaGF2ZSBpPW4gaGVyZQoJZm9yKGogPSAwIDsgaiA8IG0gOyBqKyssaSsrKXsKCQlsb25nIGxvbmcgaW50IHZhbDsKCQlzY2FuZigiJWxsZCAlbGxkICVsbGQiLCZsLCZyLCZ2YWwpOwoJCXBbaV0ub3JnICA9IGo7CgkJcFtpXS5rdmFsID0gdmFsOwoJCXBbaV0ucXJ5ICA9IDE7IAoJCXBbaV0ubCAgICA9IGwtMTsKCQlwW2ldLnIgICAgPSByOy8vIHItMSBmb3IgcmVjdXJzaXZlCgl9Cglsb25nIGxvbmcgaW50IGIgPSBuK207Ly90b3RhbCBlbGVtZW50cyArIHF1ZXJpZXMKCXFzb3J0KHAsYixzaXplb2YocFswXSksY29tcGFyZSk7IAoJZm9yKGkgPSBuK20tMSA7IGkgPj0wIDsgaS0tKXsKCQlpZihwW2ldLnFyeSA9PSAwKXsgIAoJCQl1cGRhdGUocFtpXS5vcmcsMSk7Ly8gV2UgdXBkYXRlIHRoZSBTZWdtZW50IFRyZWUgdG8gaGF2ZSB2YWx1ZSAxICAKCQl9CgkJZWxzZSBpZihwW2ldLnFyeSA9PSAxKXsKCQkJbG9uZyBsb25nIGludCByZXMgICA9IHN1bShwW2ldLmwscFtpXS5yKTsKCQkJb3V0cHV0W3BbaV0ub3JnXSA9IHJlczsgIC8vUXVlcnkncyBPcmlnaW5hbCBQb3NpdGlvbgoJCX0KCX0KCQoJZm9yKGkgPSAwIDsgaSA8IG0gOyBpKyspewoJCXByaW50ZigiJWxsZFxuIixvdXRwdXRbaV0pOwoJfQoJcmV0dXJuIDA7Cn0K