Submission #123591

#TimeUsernameProblemLanguageResultExecution timeMemory
123591tinjyuDetecting Molecules (IOI16_molecules)C++14
100 / 100
898 ms11384 KiB
#include "molecules.h" #include <iostream> using namespace std; long long int a[1000005][2],tree[1000005],c,d; long long int buildtree(int l,int r,int t) { if(l==r)return tree[t]=a[l][0]; return tree[t]=buildtree(l,(l+r)/2,t*2)+buildtree((l+r)/2+1,r,t*2+1); } long long int findtree(int l,int r,int t) { //cout<<l<<" "<<r<<" "<<t<<" "<<c<<" "<<d<<endl; if(d<l || c>r)return 0; if(c<=l && r<=d)return tree[t]; return findtree(l,(l+r)/2,t*2)+findtree((l+r)/2+1,r,t*2+1); } long long int qs(int s,int e) { //cout<<s<<" "<<e<<endl; if(s>=e)return 0; int l=s,r=e,mid=(a[l][0]+a[r][0])/2; while(l<=r) { while(a[l][0]<mid)l++; while(a[r][0]>mid)r--; if(l<=r) { swap(a[l][0],a[r][0]); swap(a[l][1],a[r][1]); l++; r--; } } qs(s,r); qs(l,e); } std::vector<int> find_subset(int l, int u, std::vector<int> w) { long long int n=w.size(); for(int i=0;i<n;i++) { a[i][0]=w[i]; a[i][1]=i; } qs(0,n-1); buildtree(0,n-1,1); for(int i=1;i<=n;i++) { int s=i-1,e=n-1; while(s<=e) { long long int mid=(s+e)/2; c=mid-i+1,d=mid; //cout<<c<<" "<<d<<endl; long long int sum=findtree(0,n-1,1); //cout<<sum<<endl; if(l<=sum && sum<=u) { long long int m=d-c+1; vector<int> ans(m); for(int j=c;j<=d;j++)ans[j-c]=a[j][1]; return ans; } if(sum<l)s=mid+1; else e=mid-1; } } vector<int> ans; return ans; }

Compilation message (stderr)

molecules.cpp: In function 'long long int qs(int, int)':
molecules.cpp:36:1: warning: control reaches end of non-void function [-Wreturn-type]
 } 
 ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...