Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #include<ext/pb_ds/assoc_container.hpp>
- #include<ext/pb_ds/tree_policy.hpp>
- using namespace __gnu_pbds;
- #define LagaKar ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
- #define pb push_back
- #define pf push_front
- #define pob pop_back
- #define pof pop_front
- #define mp make_pair
- #define fi first
- #define se second
- #define lb lower_bound
- #define ub upper_bound
- #define ook order_of_key //number of elements less than k
- #define fbo find_by_order //k th element
- #define nline "\n"
- #define YES cout<<"YES"<<nline
- #define NO cout<<"NO"<<nline
- #define Yes cout<<"Yes"<<nline
- #define No cout<<"No"<<nline
- //--------------------------------------------------------------------------------------------------------------
- #define precise(ans) cout<<fixed<<setprecision(15)<<ans
- #define fo(i,n) for(ll i=0;i<n;i++)
- #define Fo(i,k,n) for(ll i=k;k<n?i<n:i>n;k<n?i+=1:i-=1)
- #define tr(it, a) for(auto it = a.begin(); it != a.end(); it++)
- #define sz(x) ((ll)(x).size())
- #define all(x) x.begin(), x.end()
- #define MAX(x) *max_element(all(x))
- #define MIN(x) *min_element(all(x))
- #define SUM(x) accumulate(all(x), 0LL)
- #define CNT(x) __builtin_popcountll(x)
- //--------------------------------------------------------------------------------------------------------------
- typedef long long ll; typedef unsigned long long ull; typedef long double lld;
- template <typename T> using o_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
- template <typename T, typename R> using o_map = tree<T, R, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
- typedef pair<ll, ll> pl; typedef vector<ll> vl;typedef vector<vl> vvl;
- typedef vector<pl> vpl; template <typename T> using prq_mx = priority_queue<T>;
- template <typename T> using prq_mn = priority_queue<T, vector<T>, greater<T>>;
- //------------------------------------------------------------------------------------------------------------
- #ifdef hydracody
- #include <C:\Users\Anurag Dwivedi\Desktop\cpc\debug.h>
- #else
- #define debug(x)
- #endif
- //------------------------------------------------------------------------------------------------------------
- const double eps=1e-9;const ll INF=(ll)1e9;const ll inf64=2e18;const ll INF64=9e18;
- #define PI 3.1415926535897932384626
- #define MOD 1000000007
- #define MOD1 998244353
- #define MOD2 1000000009
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
- ll gcd(ll a, ll b) {if (b > a) {return gcd(b, a);} if (b == 0) {return a;} return gcd(b, a % b);}
- ll power(ll x,ll y, ll p){if(y==0)return 1;ll res = 1;x = x % p;if (x == 0) return 0;while (y > 0){if (y & 1)res = (res*x) % p;y = y>>1;x = (x*x) % p;}return res;}
- ll pinv(ll a, ll m){ return power(a, m - 2, m); }
- ll int_sqrt (ll x) {ll ans = 0; for (ll k = 1LL << 30; k != 0; k /= 2) {if ((ans + k) * (ans + k) <= x) {ans += k;}} return ans;}
- ll logceil(ll x){ll s=0;while(x>0){s++;x=x/2;}return s;}
- ll mod_add(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a + b) % m) + m) % m;}
- ll mod_mul(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a * b) % m) + m) % m;}
- ll mod_sub(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a - b) % m) + m) % m;}
- ll mod_div(ll a, ll b, ll m) {a = a % m; b = b % m; return (mod_mul(a, pinv(b, m), m) + m) % m;} //only for prime m
- ll phin(ll n) {ll number = n; if (n % 2 == 0) {number /= 2; while (n % 2 == 0) n /= 2;} for (ll i = 3; i <= sqrt(n); i += 2) {if (n % i == 0) {while (n % i == 0)n /= i; number = (number / i * (i - 1));}} if (n > 1)number = (number / n * (n - 1)) ; return number;} //O(sqrt(N))
- ll getRandomNumber(ll l, ll r) {return uniform_int_distribution<ll>(l, r)(rng);}
- void starter(int t) {cout << "Case #" << t << ": ";}
- /////////////////////////////////////////////////////////////////////////////////////////////////
- /*Don't loss hope, one day you will make it. Till then work hard.
- One day these bad days will go and you will rock.*/
- struct Segtree{
- vector<ll> t, lazy, sz;
- Segtree(ll n) {
- t.assign(4*n, 0);
- lazy.assign(4*n, 0);
- for(ll i=0;i<4*n;i++){
- lazy[i] = -1;
- }
- sz.assign(4*n, 0);
- }
- void build(vector<ll>& a, ll v, ll tl, ll tr){
- if(tl == tr){
- t[v] = 0;
- sz[v] = 1;
- }
- else{
- ll tm = (tl + tr)/2;
- build(a, v*2, tl, tm);
- build(a, v*2+1, tm+1, tr);
- t[v] = t[v*2] + t[v*2+1];
- sz[v] = sz[v*2] + sz[v*2+1];
- }
- }
- void push(ll v){
- if(lazy[v]==-1) return;
- t[v*2] = sz[v*2] -t[v*2] ;
- lazy[v*2] = lazy[v];
- t[v*2+1] = sz[v*2+1] -t[v*2+1];
- lazy[v*2+1] = lazy[v];
- lazy[v] = -1;
- }
- void update(ll v, ll tl, ll tr, ll l, ll r){
- if(l > r){
- return;
- }
- if(l <= tl && tr <= r){
- t[v] = sz[v]-t[v] ;
- lazy[v] = 1;
- } else {
- push(v);
- ll tm = (tl + tr)/2;
- update(v*2, tl, tm, l, min(r, tm));
- update(v*2+1, tm+1, tr, max(l, tm+1), r);
- t[v] = t[v*2]+t[v*2+1];
- }
- }
- ll query(ll v, ll tl, ll tr, ll l, ll r) {
- if(l>r) return 0;
- if(l <= tl && tr <= r){
- return t[v];
- }
- push(v);
- ll tm = (tl + tr)/2;
- return query(v*2, tl, tm, l, min(r, tm)) + query(v*2+1, tm+1, tr, max(l, tm+1), r);
- }
- };
- /*
- Segtree s(n);
- s.build(a,1,0,n-1);
- s.query(1,0,n-1,l,r);
- s.update(1,0,n-1,l,r,val); [l,r]
- */
- void chal(){
- ll n,m;
- cin>>n>>m;
- vl aa(n,0);
- Segtree s(n);
- s.build(aa,1,0,n-1);
- fo(i,m){
- ll x;
- cin>>x;
- if(x==1){
- ll l,r;
- cin>>l>>r;
- s.update(1,0,n-1,l,r-1);
- }else{
- ll k;
- cin>>k;
- ll str=0,end=n-1,pos=0;
- while(str<=end){
- ll mid=str+(end-str)/2;
- if(s.query(1,0,n-1,0,mid)>k){
- pos=mid;
- end=mid-1;
- }else{
- str=mid+1;
- }
- }
- cout<<pos<<nline;
- }
- }
- }
- //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- int32_t main() {
- LagaKar;
- #ifdef hydracody
- freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); freopen("error.txt", "w", stderr);
- #endif
- ll t; t = 1;
- // cin>>t;
- for (ll i = 1; i <= t; i++) {
- // cerr<<"Case : "<<i<<endl;
- // starter();
- chal();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment