Submission #1177576

#TimeUsernameProblemLanguageResultExecution timeMemory
1177576ASN49KPort Facility (JOI17_port_facility)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h> #define all(x) x.begin(),x.end() std::mt19937 rng(69); #define UNUSED -1 const int N_MAX=200'000; const int mod=1e9+7; using i64=long long; struct Aib { int n; std::vector<int>maxx; int lsb(int x) { return x&(-x); } void update(int poz,int val) { for(int i=poz;i<=n;i+=lsb(i)) { maxx[i]=std::max(maxx[i] , val); } } int query(int poz) { int rez=0; for(int i=poz;i>0;i-=lsb(i)) { rez=std::max(rez , maxx[i]); } return rez; } void init(int n) { this->n=n; maxx=std::vector<int>(n+1,0); } }; int main() { //freopen("input.txt","r",stdin); std::ios::sync_with_stdio(false); std::cin.tie(0); int n; std::cin>>n; std::vector<std::pair<int,int>>a(n); std::vector<i64>cash(2*n+1); for(auto &c:a) { std::cin>>c.first>>c.second; cash[c.first]=cash[c.second]=rng(); } int rez=1; std::set<int>mp; mp.insert(0); for(int i=1;i<=2*n;i++) { cash[i]^=cash[i-1]; if(mp.count(cash[i])) { rez*=2; rez%=mod; } mp.insert(cash[i]); } std::sort(all(a)); //din stanga in dreapta si invers Aib aib; aib.init(2*n); std::vector<int>l(n); for(int i=0;i<n;i++) { auto& c=a[i]; l[i]=aib.query(c.second); //std::cout<<l[i]<<' '; aib.update(c.second,c.second); } std::sort(all(a) , [&](std::pair<int,int>x,std::pair<int,int>y){ return x.second<y.second; }); ///std::cout<<'\n'; std::vector<int>r(n); aib.init(2*n); for(int i=n-1;i>=0;i--) { auto& c=a[i]; r[i]=2*n-aib.query(2*n-c.first+1)+1; ///std::cout<<r[i]<<' '; aib.update(2*n-c.first+1 , 2*n-c.first+1); } ///std::cout<<'\n'; for(int i=0;i<n;i++) { rez*=(l[i]<=r[i]); } std::cout<<rez<<'\n'; return 0; } /* 1 4 2 10 3 5 6 9 7 8 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...