1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); PrintWriter pw = new PrintWriter(System.out); while (sc.hasNext()) { int n=sc.nextInt(); int k=sc.nextInt(); int q=sc.nextInt(); int[]sum=new int[200050]; int[]res=new int[200050]; SegTree tree=new SegTree(200001); for(int i=0;i<n;i++){ int a=sc.nextInt(); int b=sc.nextInt(); tree.update(0,a,b+1,1,0, tree.n); } for(int i=1;i<=200000;i++){ if(tree.queryreg(0, i, i+1, 0, tree.n)>=k){ res[i]+=(res[i1]+1); }else{ res[i]=res[i1]; } } for(int j=0;j<q;j++){ int l=sc.nextInt(); int r=sc.nextInt(); pw.println(res[r]res[l1]); } pw.flush(); } } } class SegTree{ int[]tree=new int[900050]; int[]lazy=new int[900050]; int n; SegTree(int n_){ this.n=1; while(n<n_){ n*=2; } Arrays.fill(tree, 0); } void pushdown(int num,int l,int r){ if(lazy[num]!=0){ tree[num*2+1]+=lazy[num]; tree[num*2+2]+=lazy[num]; lazy[num*2+1]+=lazy[num]; lazy[num*2+2]+=lazy[num]; lazy[num]=0; } } void update(int num,int l,int r,int add,int x,int y){ if(r<=xl>=y)return; if(l<=x&&r>=y){ tree[num]+=add; lazy[num]+=add; return; } pushdown(num,x,y); update(num*2+1,l,r,add,x,(x+y)/2); update(num*2+2,l,r,add,(x+y)/2,y); tree[num]=tree[num*2+1]+tree[num*2+2]; } int queryreg(int num,int l,int r,int x,int y){ if(r<=xl>=y)return 0; if(l<=x&&r>=y){ return tree[num]; } pushdown(num,x,y); int left=queryreg(num*2+1,l,r,x,(x+y)/2); int right=queryreg(num*2+2,l,r,(x+y)/2,y); return left+right; } }
