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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
| #include<bits/stdc++.h> using namespace std; const int MAXN=1e5+5; const int MOD=1e9+7; typedef long long ll;
int tree[MAXN],up; vector<int> vec; pair<pair<int,int>,int> a[MAXN]; int T;
void add(int x,int a) { while(x<=up) tree[x]+=a,x+=x&(-x); }
int sum(int x) { int res=0; while(x) res+=tree[x],x-=x&(-x); return res; }
int main() { int n,k,op,l,r; scanf("%d%d",&n,&k); if(n==0) { printf("fafa\n"); return 0; } if(k) { up=k; for(int i=1;i<=n;i++) { scanf("%d",&op); if(op==1) { scanf("%d%d",&l,&r); if(r-l+1>=k) { add(1,1); add(k+1,-1); continue; } l=(l%k)+1; r=(r%k)+1; if(l<=r) {add(l,1); add(r+1,-1);} else { add(1,1); add(r+1,-1); add(l,1); add(k+1,-1); } } else if(op==2) { scanf("%d%d",&l,&r); if(r-l+1>=k) { add(1,-1); add(k+1,1); continue; } l=(l%k)+1; r=(r%k)+1; if(l<=r){ add(l,-1); add(r+1,1); } else { add(1,-1); add(r+1,1); add(l,-1); add(k+1,1); } } else { scanf("%d",&l); printf("%d\n",sum(l%k+1)); } } } else{ up=2*n; for(int i=1;i<=n;i++) { scanf("%d%d",&a[i].second,&a[i].first.first); vec.push_back(a[i].first.first); if(a[i].second<=2) { scanf("%d",&a[i].first.second); vec.push_back(a[i].first.second); } } sort(vec.begin(),vec.end()); vec.erase(unique(vec.begin(),vec.end()),vec.end()); for(int i=1;i<=n;i++) { if(a[i].second==1) { l=lower_bound(vec.begin(),vec.end(),a[i].first.first)-vec.begin()+1; r=lower_bound(vec.begin(),vec.end(),a[i].first.second)-vec.begin()+1; add(l,1); add(r+1,-1); } else if(a[i].second==2) { l=lower_bound(vec.begin(),vec.end(),a[i].first.first)-vec.begin()+1; r=lower_bound(vec.begin(),vec.end(),a[i].first.second)-vec.begin()+1; add(l,-1); add(r+1,1); } else{ int x=lower_bound(vec.begin(),vec.end(),a[i].first.first)-vec.begin()+1; printf("%d\n",sum(x)); } } } return 0; }
|