Submission #123583

#TimeUsernameProblemLanguageResultExecution timeMemory
123583tinjyuDetecting Molecules (IOI16_molecules)C++14
0 / 100
2 ms376 KiB
#include "molecules.h" #include <iostream> using namespace std; long long int a[1000005],tree[1000005],c,d; long long int buildtree(int l,int r,int t) { if(l==r)return tree[t]=a[l]; 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]+a[r])/2; while(l<=r) { while(a[l]<mid)l++; while(a[r]>mid)r--; if(l<=r) { swap(a[l],a[r]); 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]=w[i]; qs(0,n-1); buildtree(0,n-1,1); for(int i=1;i<=n;i++) { int s=i,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]=j; 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:35: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...